こんにちは、サシャ(@sashalog_com)です。
今回は「WordPressのindex.phpとindex.htmlを共存させる方法」についてご紹介します。
WordPressではindex.phpがトップページとして表示されますが、同じ階層にindex.htmlがある場合はリダイレクトされてindex.htmlの内容がトップページとして表示されます。
通常は、index.htmlを削除すればWordPressのindex.phpがトップページとして表示されます。
しかし、htmlで作られているウェブサイトをWordPressに作り変える時など、現状のトップページであるindex.htmlを稼働させながら、index.phpを表示させてWordPressを構築する場合は、index.htmlとindex.phpを共存させる必要があります。
index.phpとindex.htmlを共存させる方法
canonical.phpの一部をコメントアウトする
index.phpとindex.htmlを共存させるには、WordPressディレクトリ内のwp-includes/canonical.phpを編集します。
WordPressのバージョンによって記載箇所は異なりますが、WordPress 5.9.2では514行目と590行目あたりにある以下のコードをコメントアウトします。
$redirect['path'] = preg_replace( '|/' . preg_quote( $wp_rewrite->index, '|' ) . '/?$|', '/', $redirect['path'] );
$redirect['path'] = preg_replace( '|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path'] );
これでindex.phpとindex.html、どちらにもアクセスできるようになりました。
https://example.com/ → index.htmlの内容が表示される
https://example.com/index.php → WordPressのindex.phpの内容が表示される
表示の優先順位を変更する方法
index.htmlではなくindex.phpの表示を優先させる場合は、.htaccessに以下のコードを追記します。
DirectoryIndex index.php index.html
これによりindex.phpが優先して表示されるようになります。
https://example.com/ → WordPressのindex.phpの内容が表示される
https://example.com/index.html → index.htmlの内容が表示される
index.phpをディレクトリルートにリダイレクトさせない方法
canonical.phpの一部をコメントアウトしていても、WordPressでホームページの設定を「最新の投稿」ではなく「固定ページ」に設定している場合、index.phpにアクセスするとディレクトリルートにリダイレクトされてしまう場合があります。
このような時はfunctions.phpに下記のコードを追記することで、リダイレクトを解消できます。
remove_filter('template_redirect', 'redirect_canonical');
まとめ
今回は「WordPressのindex.phpとindex.htmlを共存させる方法」についてご紹介しました。