Edited at

クエリパラメータ付きのURLをmod_rewriteでリダイレクトさせる

More than 3 years have passed since last update.

/fuga/?id=xxxxxx

みたいなURLを

/fuga/xxxxxx/

こうしたいみたいな話、よくあります。

さっそくmod_rewriteのRewriteRule使って飛ばしてみます。


早速のRewriteRule

RewriteEngine on

RewriteRule ^fuga/?id=(.+) /fuga/$1/ [L,R=301]

これで試してみましたが、うまくリダイレクトされません。

ちなみにたまたまやりたきことが「L,R=301」だったのでそのまま書いてます。


クエリパラメータの拾い方

どうやらRewriteRuleで検証する値にクエリパラメータは含まれないようです。

ということでRewriteCondを用いた方法を考えてみます。

RewriteEngine on

RewriteCond %{QUERY_STRING} id=(.+)
RewriteRule ^fuga/ /fuga/%1/ [L,R=301]

他にクエリパラメータがあった場合とかは一旦考えてません。

後方参照に関しては、RewriteRule内のものであれば「$」で取れましたが、RewriteCondのものは「%」になるので

その点は注意が必要ですね。


クエリパラメータのままで置換したい場合

たとえばid=1234だったらid=5678にしたいようなケース。

同じように設定すれば対応可能です。

RewriteEngine on

RewriteCond %{QUERY_STRING} id=1234
RewriteRule ^fuga/ /fuga/?id=5678 [L,R=301]

idの値まできちんと指定すれば問題なくリダイレクト可能です。

RewriteRule使う上ではきっと初歩的なところだと思うのですが

一瞬「あれ?」となったので備忘録的にメモっておきます。