いや~、はまったはまった。。。
mod_rewriteを使った場合にクエリーに「%2F」が含まれていてうまく動かない場合の解決方法です。
PHPで以下のようなスクリプトをくんだとします。
index.php
< ?php echo $_GET["pre"]; echo $_GET["path"]; ?>
そして、
以下のように「.htaccess」にmod_rewrite構文を設定していたとします。
RewriteEngine On
RewriteRule ^hiroshima/(.*)$ index.php?pre=hiroshima&path=$1 [L]
ここで、「http://*******/hiroshima/aiueo/」にアクセスすると、きちんとアクセスできます。
この場合、mod_rewriteによって実際には、「http://****/index.php?pre=hiroshima&path=aiueo」にアクセスします。
しかし、
http://*******/hiroshima/aiueo%2Fkakikukeko/
にアクセスすると、うまくアクセスできなくなってしまいました。
mod_rewriteによって、
http://****/index.php?pre=hiroshima&path=aiueo%2Fkakikukeko
というURLに実際にはアクセスするのですが、「%2F」、つまりは「/(スラッシュ)」をURLエンコードした文字列を含む場合、うまくデコードしてくれないようなのです。
この解決方法としては、
Apacheの設定ファイル、「httpd.conf」に以下の分を追加します。
AllowEncodedSlashes On
これでうまくスラッシュをデコードしてくれるようです。
関連記事
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.multiburst.net/sometime-php/2008/10/mod_rewrite2f/trackback/
- Listed below are links to weblogs that reference
- mod_rewriteの「%2F」問題の解決法 from Sometime PHP
Additional comments powered by BackType





