2011年 4月 30日 はてなブックマーク -
タグ: #Apache
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のままプロキシできるというわけでしたー。

apacheが%2Fを勝手にデコードして生きるのが辛いとき - かみぽのメモ

「AllowEncodedSlashes On」を追加するだけじゃ問題は解決していません。
一度デコードされてしまうんで、例えば「%2f(ASCIIの「/」)」とかがあるとすると、いったいそれがもともと「/」で入ってたのか、「%2f」で入ってたのかわからなくなってしまうんですよね。
そこで上記の設定が役に立ちます。


1年前 | | 2011年 4月 30日 | このエントリーを含むはてなブックマーク