mod_rewrite urlencoding已经urlencoded查询string参数 – 任何方式来禁用此?

我们有一些非常基本的mod_rewrite规则:

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

mod_rewrite似乎做了它的工作,如果用户正在访问:

something.swf?param=value ,它被正确地redirect到something.html

问题在于这种情况:

 www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

最后发生的是mod_rewrite将其自身重新编码查询string参数

所以用户最终得到的是:

 www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

redirect到

 www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE 

所以我们结束了一个双重urlencoded值。 boourns!

虽然我明白我们可以做一个\?(.*)?$1规则,我想一定有办法告诉mod_rewrite不urlencode查询string参数…我们想避免使用2条规则,因为有效的path是:

 something.swf (no query string) 

 something.swf?someparams... 

所以是的,理想情况下…只是告诉mod_rewrite:请不要查询string参数的urlencoding …只是通过R=302直接passthru到新的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保留所有查询string值,而不进行任何编码/转义。

一样容易:)