CGI: url-encode : mod_rewrite
CleanでCGIを作っているのだけれど、あるURLを入力すると、400 Bad Requestになってしまって接続できないという現象がおきて困っている。
どうも、mod_rewriteを経由するとおこる現象のようで、書き換え後のURLを直接入力すると、エラーはおこらない。
問題が起きるURLは次のようなもの。
http://localhost:8080/view/aa%25a/ http://localhost:8080/view/aa%25&aa/
次のは起きない。
http://localhost:8080/view/aa%25aa/
非常に微妙な状況である。
いろいろ探していて、関連しそうな記事を見かけたのでリンクしておく。
http://www.issociate.de/board/post/274279/mod_rewrite:__20_-%3E_space_-%3E_400_Bad_Request.html
-
-
- -
-
もしやと思って試してみたら、やはり、次のURLは失敗した。
http://localhost:8080/view/aa%25zz/
どうも、mod_rewriteを通ると、'%25??'が'%??'に変化して解釈されるよう。
上のURLを見るに、
RewriteMap escape int:escape RewriteRule ^/user/(.*)/search/(.*)$ /simpy/User.do?username=${escape:$1}&q=${escape:$2} [L]
という書き方が有効なようなので試してみる。
-
-
- -
-
上のでOKでした。
ただし、RewriteMapは、directoryタグの中には書けなくて、
RewriteMap escape int:escape <Directory "..."> RewriteEngine on RewriteRule ^(.*)/$ /cgi-bin/Controller/${escape:$1}/ [L] </Directory>
と書いてあげる必要がありました。