mod_rewrite urlencoding既にurlencodeされたクエリ文字列パラメーター-これを無効にする方法はありますか?
いくつかの非常に基本的なmod_rewriteルールがあります。
_RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
_
mod_rewriteはその仕事をしているようで、ユーザーがアクセスしている場合:
_something.swf?param=value
_、_http://www.newdomain.com/something.swf?param=value
_に正しくリダイレクトされます
問題はこの状況にあります:
_www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
_
最終的に起こっているのは、mod_rewriteがそれを自分自身に取り込んでクエリ文字列パラメータを再エンコードすることです
そのため、ユーザーは次のようになります。
_www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
_
リダイレクト先
_www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE
_
そのため、最終的に二重にエンコードされた値になります。沸く!
このために\?(.*)
... _?$1
_ルールを作成できることは理解していますが、クエリ文字列パラメーターをurlencodeしないようにmod_rewriteに指示する方法があるはずだと考えています...有効なパスは次のとおりであるため、2つのルールの使用を避けたい:
_something.swf (no query string)
_
そして
_something.swf?someparams...
_
そう、理想的には...単にmod_rewriteに伝えてください:クエリ文字列パラメーターのurlencodingはありません... _R=302
_を介して新しいURLに直接パススルーしてください。
これを実現する方法は、NE(エスケープなし)パラメーターを使用することです。
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
実際に読んでください
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L]
これにより、mod_rewriteはエンコード/エスケープを行わずに、すべてのクエリ文字列値をそのままにします。
それと同じくらい簡単:)