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]
Posted by otsuka : 04:53 | Comment (0) | Trackback (0)
Comment









名前、アドレスを登録しますか?