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フォルダ
testフォルダ内にあるindex.php
と.htaccess
をローカルにダウンロードし、1つ上の階層(testフォルダと同階層)にアップロードする。
すると、以下のようになる。
- public_htmlフォルダ
- testフォルダ
- .htaccess //コピー元
- index.php //コピー元
- .htaccess //コピー先、事項の編集対象
- index.php //コピー先、事項の編集対象
- testフォルダ
コピーしたファイルを編集する
コピーした方の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