【.htaccess】リダイレクトを行う際にクエリを削除する
.htaccessでリダイレクトをさせるときにクエリを削除したかったのですが、変なところで微妙にハマったのでメモ書きです。
対応例
例として、
http://example.com/hoge/?fuga=piyo
から
http://example.com/
へリダイレクトさせるとします。
解決法
クエリを削除するには、RewriteRuleの転送先URLの末尾に「?」(半角クエスチョンマーク)を指定すればOKです。
コード
上手くいかない例
.htaccess
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ /? [R=301,L]
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ /? [R=301,L]
上記の例だとクエリが削除されず、パラメータを引き継いだ状態で
http://example.com/?fuga=piyo
へとリダイレクトされてしまいます。
上手くいく例
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ http://example.com/? [R=301,L]
どうやら、RewriteRuleの転送先URLを指定する箇所をサイトルート相対パスで記述しているときちんとクエリが削除されてくれないようです。なので、クエリを削除したい場合はきちんとフルパスでURLを記述しましょう。
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/? [R=301,L]
こちらの記述でもOKです。
ただし、「http://」の部分はどうしようもなさそうなので、ここは固定で記述するしかなさそうです。
おまけ
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/? [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/hoge/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/? [R=301,L]
こうすれば本番環境とテスト環境でそれぞれSSL対応・非対応で分かれていても対応できますが、コードが冗長になってる感が否めず若干気持ち悪いです。ってかクエリを削除するだけなのに6行も使うのはいかがなものか。
どなたかいい解決法があったら教えてください。
Author And Source
この問題について(【.htaccess】リダイレクトを行う際にクエリを削除する), 我々は、より多くの情報をここで見つけました https://qiita.com/seserisan/items/51564148ad3fcb114531著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .