ことの是非はともかく、WordPressをindex.htmlでアクセスされた時でも表示したいというケースは多々あります。
もちろん .htaccess でリダイレクトしても良いのですが、今回はWordPress側で行える簡単な対策を紹介します。
WordPressは、パーマリンクの利用時に、環境変数の $_SERVER[‘REQUEST_URI’] を元に、表示条件を決定しています。このため、表示条件を割り出しを行う前に、環境変数自体を改変し、index.htmlを削除してしまえば、index.html 付きのアクセスでも表示は可能になります。
CODE 1は、この考え方を元に、$_SERVER[‘REQUEST_URI’]をWordPressが表示条件の割り出しが出来、なおかつ非正規のリクエストと認識されるように書き換えます。
非正規のリクエストの場合、WordPressは wp-includes/template-loader.phpの template_redirect フックにて、正規のURLにリダイレクトを行うようになっているため、index.html付きでリクエストされた場合でも、最終的にパーマリンク設定本来のアドレスで表示されるようになっています。
CODE 1
function remove_index_html_request() { if ( is_admin() ) { return; } $permalink_structure = get_option( 'permalink_structure' ); $home_root = parse_url( home_url() ); if ( isset( $home_root['path'] ) ) { $home_root = trailingslashit( $home_root['path'] ); } else { $home_root = '/'; } if ( $permalink_structure ) { if ( $_SERVER['REQUEST_URI'] == $home_root .'index.html' ) { $replace = '/index.php'; } elseif ( preg_match( '/\/$/', $permalink_structure ) ) { $replace = ''; } else { $replace = '/'; } $_SERVER['REQUEST_URI'] = preg_replace( '/\/index\.html$/', $replace, $_SERVER['REQUEST_URI'] ); } } add_action( 'init', 'remove_index_html_request' );
※ マルチサイト運用時の検証など不十分なので、その点ご留意ください。
役に立つ記事ありがとうございます。
ちなみに、CODE1はどのファイルに加えればいいのでしょうか?
tepppeikawaguchiさん、ありがとうございます。
他に紹介しているコード同様、テーマのfunctions.phpに追記するか、多くのサイトで利用するのであれば、独自プラグインなどにしてもらえればよいです。
(独自プラグインの作り方は、初心者でも10秒でできる WordPress プラグインの作り方やWordPress でスニペットを簡単に管理する方法あたりを参考に)
ありがとうございます。
無事に出来ました。
助かりました(^-^)