質問: ### 前提・実現したいこと WordPressでサイトをリニューアルしましたが、運用前に別のCMSで運用しており、その際に index.php?トップページ index.php?製品ページ のようなクエリ付きのURLを発行していたため、WordPressへリニューアル後もそのURLでのアクセスがあり、無限ループが発生してGoogleのSearchConsoleからお叱りを受けております。 リダイレクトする際に、?以降のクエリを省くように.htaccessに設定すればよいのではないかと考えております。 ### 発生している問題・エラーメッセージ ・飛んでくるURL例 https://www.・・・.jp/?%E3%82%B5%E3%82%A4%E3%83%88%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC もしくは https://www.・・・.jp/index.php?%E3%82%B5%E3%82%A4%E3%83%88%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC でアクセスすると、Chromeの場合は > > このページは動作していません www.・・・.jp でリダイレクトが繰り返し行われました。 > > Cookie を消去してみてください. > > ERR_TOO_MANY_REDIRECTS > > > と表示されます。 ### 現状の.htaccess 普通のWordPressの.htaccessです。 ``` # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress ``` ### 試したこと そもそもあまりリダイレクトの書式を理解してないのですが、他のサイトを見て ``` RewriteRule ^index.php(.*)$ /$1? [R=301,L] ``` を の上に追加してみましたが、現象は一緒でした。 リダイレクトが起きなければ?以降を削除する方法でなくても結構です。 どうぞよろしくお願いいたします。
回答: クエリー部分が空でなければ、/ にと言うことなら、 ``` RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} !^$ RewriteRule ^$ /? [R=301,L] RewriteCond %{QUERY_STRING} !^$ RewriteRule ^index\.php$ /? [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] ```