かみぽわーる

kamipo's blog

Apacheが%2Fを勝手にデコードして生きるのが辛いとき

mod_rewriteでの最後の砦 - As a Futurist...をみて、僕もApacheでURLに%2Fを含むリクエストをリバースプロキシするときに困ったことがあったなーというのを思い出した。

AllowEncodedSlashes On
RewriteRule ^/(.*)$ http://backend/$1 [QSA,L,P]

みたいな設定を書いてるときにfrontendに

http://frontend/keyword/Fate%2Fstay+night

なリクエストが来ると、この設定だとbackendには

http://backend/keyword/Fate/stay+night

%2FがデコードされたURLにプロキシしてしまう!

%2Fのままプロキシするには以下のように設定をすればよい。

AllowEncodedSlashes On
RewriteCond %{THE_REQUEST} /([^\ ]*)
RewriteRule ^/(.*)$ http://backend/%1 [QSA,L,P,NE]

RewriteCondで生のリクエスト文字列にマッチングを掛けて、RewriteCondの後方参照(%N)を使えば%2Fのままプロキシできるというわけでしたー。

それではAKB48 22ndシングル 選抜総選挙チャンネル監視業務に戻ります∠( ̄∧ ̄)