2007年12月19日
Linux | mod_rewriteでQueryStringを扱う
mod_rewriteはあまり使うことがないので、なかなか設定を覚えられず、毎回調べないといけない。
今回は、/do_something.cgi?id=123 を /do/something/123/ にリライトしたくて調べた。来週になったらもう忘れてそうなのでメモしておく。
まずRewriteRuleでは「?」以降はマッチ対象にならないということが分かった。RewriteCondを使ってQueryStringをマッチさせて、その後でRewriteRuleする。RewriteCondでマッチしたものは%変数に格納され、RewriteRuleで使える。
RewriteCond %{QUERY_STRING} id=(\d+)
RewriteRule ^/do_something.cgi /do/something/%1/ [R=301,L]
これで特に問題なくリライトはされるのだけど、リダイレクトされるURLには /do/something/123/?id=123 とQueryStringがそのまま残ってしまう。このQueryStringがリライト後に付かないようにするには最後に「?」を付ける。
RewriteCond %{QUERY_STRING} id=(\d+)
RewriteRule ^/do_something.cgi /do/something/%1/? [R=301,L]
Comment