35歳で会社を辞めて独立したまめのブログ

現役Webデザイナーがお答えします

【WordPress】ルートにあるindex.phpとindex.htmlの両方で表示させる方法

※当サイトはWeb広告を利用しています


WordPressを表示させるには、サーバーのルートにあるindex.phpにアクセスします(もちろんルートに構築した場合です)。

通常であれば、http://www.sample.com/にアクセスすれば問題なく表示されます。

しかし、ティザーサイトやプロモーションサイトで、index.phpと同じ階層(ルート)にindexhtmlをアップロードして、その両方を表示させたい場合もあるでしょう。

結論からいうとhtaccessとWordPressの自動リダイレクト処理の無効化により実現可能になります。

私も先日、お店のオープン前まではindex.htmlで告知ページを表示させ、その間に裏でWordPressを構築(BASIC認証かけて)。オープンと同時にWordPressに切り替えるという案件がありました。その際、index.phpでもindex.htmlでも両方で見られるようにしました。

このページでは、それを実現する方法を紹介します。

スポンサードリンク

index.phpを優先させる場合

目的

http://www.sample1.com/
にアクセスするとWordPressが見られる。

http://www.sample1.com/index.html
にアクセスするとプロモーションサイトが見られる。

方法

ルートにあるhtaccessの最後に、

DirectoryIndex index.php index.html

を記述。この処理でindex.phpが優先されるようになります。これだけで目的は達成されます。

index.htmlを優先させる場合

目的

http://www.sample1.com/
にアクセスするとプロモーションサイトが見られる。

http://www.sample1.com/index.php
にアクセスするとWordPressが見られる。

方法

上のhtaccessのやり方で、記述を逆にする(DirectoryIndex index.html index.php)だけでは実現できません。

なぜなら、WordPressの仕様上、自動的にリダイレクトされる処理がなされているからです。つまり、index.phpにアクセスしても、index.htmlしか表示できません。

この場合は、以下の方法をとります。

WordPressファイル群の

wp-includes/canonical.php

をテキストエディタなどで開きます。

384行目にある以下のコードをコメントアウトします(バージョン4.4)。

$redirect['path'] = preg_replace('|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path']);

これで、http://www.sample.com/index.phpでWordpressにアクセスできるようになります。

バージョンによって記述位置とコードが異なる場合があります。その場合はcanonical.php内の別の行を探してください。

なお、自動リダイレクトされるようになったのは、WordPress2.7以降からです。