mod_rewrite クエリー文字列でパーセントがあるエンコードされるのを避ける
「example.com/test.php?id=ID%2id1234」のようなクエリー付きのパラメータでmod_rewrite でリダイレクトをするときに「%」を含む場合に、「%2」が「%253」のように変更される場合があります
下記のmod_rewrite の設定では、「example.com/test.php?pid=1234」にアクセスすると「example.com/test.php?id=1234」にリダイレクトされます。
RewriteCond %{QUERY_STRING} ^(.*&)?pid=(.*) RewriteRule (.*) $1?id=%2 [R=301,L]
この時にパラメータに「%2」等のある場合は、「example.com/test.php?pid=pid%2abc」にアクセスすると「example.com/test.php?id=id%253abc」のように「%2」が「%253」のように変換されます。
リダイレクト時にパーセントがある場合にURLエンコードされる為です、これを避けるには「%」の前に「\」をつけて「\%」のようにすれば良いのですが、mod_rewrite のフラグで「NE」でも対応可能です
「NE」のフラグは、".", “?", “%"などの特殊文字が"%25″のようにエンコードされるのを防ぎます
RewriteCond %{QUERY_STRING} ^(.*&)?pid=(.*) RewriteRule (.*) $1?uid=%2 [R=301,NE,L]
ディスカッション
コメント一覧
まだ、コメントがありません