こんにちは、しのです。
本日は「.htaccessでリダイレクトする際にクエリパラメータを削除する方法」というテーマです。
くそー、古いサイトから新しいサイトにパラメータ無しでリダイレクトしたいのにパラメータが残っちゃう。。どうやって解決したらいいんだー!
上記のようなことでお悩みの方に解決策を提案します
それでは早速いってみましょう!
.htaccessでリダイレクトする際にクエリパラメータを削除する方法
では早速回答からです。
例えば以下の場合、https://example.com/hoge/hoge.html?=123の「?=123」を削除してhttps://example.com/404 に転送している形です。
RewriteEngine On
# クエリパラメータを削除
RewriteCond %{QUERY_STRING} .
RewriteRule ^hoge/hoge\.html$ /404/? [R=301,L]
ブラウザのキャッシュが残っていると上手く新しいリダイレクト処理が反映されない場合があるのでプライベートブラウズモードなどで確認するようにしましょう。
反映されない場合の原因について
実は先日僕はこの一件で久しぶりにハマりまして。。。苦笑
5,6時間という貴重な時間をこの一件に使ってしまったのでした。
原因としては RewriteEngine On の場所でした。
例えば、以下のように他の記述を書く中の一つとして今回のパラメータ削除の記述も書いていたんですが、
# HTTPS化の設定
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www を付与
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{QUERY_STRING} .
RewriteRule ^hoge/hoge\.html$ /404/? [R=301,L]
RewriteEngine On を
<IfModule mod_rewrite.c>
</IfModule>
の中に書いてしまってたんですよね。
これが原因だったのかなと。
他のHTTPSへのリダイレクトやwwwの付与が機能しているのでそこに行き着くのに時間がかかってしまいました。
ただ他の記事でこういった事に言及されている記事が無かったので同じことで悩む方の参考になれば嬉しいです。
ほなね。