mod_rewriteで特定のクエリパラメータを削除する

.htaccess などで特定のクエリパラメータを削除する書き方メモ。
以下は、携帯サイトで意図せず余計なパラメータが付加されてしまうことで裏にあるキャッシュシステムのヒット率が下がってしまうという問題の対策に使っている設定です。

# 不要パラメータを削除する
RewriteCond %{QUERY_STRING} ^(.*&)?(?:uid|sid|pid)=[^&]*&?(.*)?$
RewriteRule (.*) $1?%1%2 [N]

[N]は普段あまり使わないフラグですがNextの意味で、書き換えが発生したときに最初のルールから*1やり直すという命令です。これを使うとループが書けるようになります。但し無限ループを作らないよう気を付けましょう。
あと、当然ですがここで設定したuidパラメータ等が必要なページがある場合は除外するようRewriteCondを追加したりします。

*1:『最初のルールから』:ドキュメントにはこう書いてありますが、ここで言う最初のルールというのはこのRewriteRuleに関連する最初のRewriteCond(ルール)という意味で、[N]を付けたRewriteRuleより前に記述しているかもしれない関係無いRewriteRuleまでが繰り返されるわけではありません。

続きを読む