WordPressのURLと同じディレクトリが存在する場合の対策
現象
WordPressのURLに含まれる文字列と同じディレクトリが存在する場合、ディレクトリが優先されてしまうため該当ページが存在しないというエラー(403)扱いなる場合があります。
【例】
URL: https://sample.com/abcde/
ディレクトリ: /abcde/
上記の例では「abcde」が一致する。
対策
WordPressのURLとディレクトリを一致させない環境を構築することが許諾されるのであれば問題ないのですが、そうでない場合は以下の4つの方法で解決できる場合があります。
方法
- WordPressへの制御移行のための index.php の設置
対象となるディレクトリすべてに以下のファイルを設置します。
.htaccess
1DirectoryIndex index.php index.htm index.html index.cgiindex.php
1234<?phpdefine('WP_USE_THEMES', true);require( '../wordpress/wp-blog-header.php' );?>上記はドキュメントルートに/wordpress/というディレクトリにWordPress本体が格納されている環境下で、ドキュメントルート直下のディレクトリに設定する例です。ディレクトリ階層に従って相対レベルを変更してください。
- リダイレクトループが発生する場合
functions.php に以下を記述してください。
1remove_filter('template_redirect', 'redirect_canonical'); - 下層ページのリダイレクト
.htaccessの冒頭部に以下を記述してください。これは通常のリダイレクト処理です。
1Redirect permanent /work/xxxxx.html https://sample.com/work - トップページのリダイレクト
トップページ https://sample.com/index.html のリダイレクトは.htaccessで処理するとリダイレクトループが発生して厄介です。WordPress(php)に処理させるために functions.php に以下を記述してください。
1234567891011121314// https://sample.com/index.html の「index.html」部分を取得$strRequest = trim($_SERVER['REQUEST_URI'],'/');// URIとリダイレクト先の対応表$arrayRedirect = array('index.html' => 'https://sample.com/',);// 対応表に存在すれば301リダイレクト実行if(array_key_exists($strRequest,$arrayRedirect)){header("HTTP/1.1 301 Moved Permanently");header('Location: '.$arrayRedirect[$strRequest]);exit;}
弊社サイトご案内
弊社ではデザイン会社様やウェブサイト制作会社様との提携・協業を随時お願いしております。