WordPressをサブディレクトリにインストールしてルートで表示する

WordPressはセキュリティ面でサブディレクトリにインストールするほうが良いと言われる。サブディレクトリにインストールすると、トップページのURLが、

http://test.com/test

のようになるので、すっきりとしたURLへ変更し、

http://test.com

をトップページを表示するURLとする設定を行う。

手順

WordPressをサブディレクトリにインストールする

FTPでサーバー上にWordPressフォルダ一式をアップロードし、新規データベースを作成する。

方法は、WordPressを任意のテーブル接頭辞&サブディレクトリにインストールするなどを参照。

WordPressにトップのURLを教える

ダッシュボードにログインし、設定一般設定へ移動し、サイトアドレスからサブディレクトリを削除する。

ただし、WordPressアドレスは変更してはいけない。

WordPressアドレスhttp://test.com/test
※変更しない!
サイトアドレスhttp://test.com/test
 ↓
http://test.com
※最後にスラッシュを付けない

変更を保存する。

http://test.com/testへアクセスすると、404が返ってくるようになる。

サーバーのファイルをコピーする

FTPでサーバーへアクセスし、testフォルダ内にあるindex.php.htaccessコピーを、testフォルダと同階層に設置する。

詳しく説明する。

WPインストール直後のサーバー、は以下のような構造になっている。

  • public_htmlフォルダ
    • testフォルダ
      • .htaccess
      • index.php

testフォルダ内にあるindex.php.htaccessローカルにダウンロードし、1つ上の階層(testフォルダと同階層)にアップロードする。

すると、以下のようになる。

  • public_htmlフォルダ
    • testフォルダ
      • .htaccess //コピー元
      • index.php //コピー元
    • .htaccess //コピー先、事項の編集対象
    • index.php //コピー先、事項の編集対象

コピーしたファイルを編集する

コピーした方のindex.phpと.htaccessを編集する。

index.phpを編集する

index.phpをエディターで開くと、すでに以下のような記述がされている。


/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';

およそ17行目にあるrequire DIR . '/wp-blog-header.php';に、サブディレクトリを追記したいので、

require DIR . '/test/wp-blog-header.php';と書き直して保存する。


/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/test/wp-blog-header.php';

.htaccessを編集する

.htaccessをエディターで開くと、すでに以下のような記述がされている。


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /test/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php [L]
</IfModule>

およそ9行目と13行目からサブディレクトリを削除したいので、

RewriteBase /test/RewriteBase /へ、

RewriteRule . /test/index.php [L]RewriteRule . /index.php [L]と書き直して保存する。


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

2ファイルの編集が完了したらサーバーへアップロードする。

トップページアクセスする

http://test.comへアクセスすると、無事トップページが表示される。

一方、http://test.com/testは存在しないURLのため404が返ってくる。

メモ

ルートディレクトリにはすでに.htaccessが存在していたが、上書きを行った

おまけ

.htaccess# BEGIN WordPress~#END WordPressの内容は、管理画面で特定の操作をした際に書き換わってしまうため、ルートで表示する設定がいつの間にか変更になってしまうことがある。

メモ

「設定 > パーマリンク設定」の画面で「保存」ボタンを押すと、Wordpress側の動作で.htaccess内のリダイレクトに関する記述が巻き戻ってしまい、サイトルートへのリダイレクトがされなくなってしまう

その対策として、# BEGIN WordPress~# END WordPress内に記述された下記のコード一式を、# BEGIN WordPress~# END WordPressの外へコピーするという方法がある。

コピー後の.htaccessはこちら。


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

コードの解説

サブディレクトリにインストールしたWordPressをルートで表示できたが、その仕組を解説する。

まず、http://test.comにアクセスがあると、.htaccessを読みに行く。

.htaccessには、index.phpを読みに行くように書かれている。

そこで、index.phpを読みに行くと、/test/wp-blog-header.phpを読むように指示が書かれている。

wp-blog-header.phpは設定の読み込みとURL解析/クエリ変換、テンプレートの読み込みを行う。読み込まれるwp-blog-header.phpはtestフォルダ内のwp-blog-header.phpなので、testフォルダにインストールしたWordPressが表示される。

という仕組み。

参考
  • WordPressをサブディレクトリにインストールしてトップページはルートにする方法
    https://aya404.com/blog/develop/140_wordpress-subdirectory/
  • 【Webサイトをリニューアルする時によく使ってます】WordPressを専用ディレクトリに配置する方法を解説したスライドがとてもわかりやすい
    https://www.imamura.biz/blog/14061
  • WordPressのページが表示されるまでの流れと仕組み
    https://marycore.jp/wordpress/wp-flow/

Related Tags