ano*_*one 52 apache mod-rewrite
我们有一些非常基本的mod_rewrite规则:
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
Run Code Online (Sandbox Code Playgroud)
mod_rewrite似乎完成了它的工作,如果用户正在访问:
something.swf?param=value,它被正确地重定向到 http://www.newdomain.com/something.swf?param=value
问题出在这种情况:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
最终发生的事情是mod_rewrite将它自己重新编码查询字符串参数
所以用户最终得到的是:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
重定向
www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
所以我们最终得到一个双urlencoded值.boourns!
虽然我明白我们可以制定一个\?(.*)...... ?$1规则,但我认为必须有一种方法告诉mod_rewrite不要urlencode查询字符串参数...我们希望避免使用2条规则,因为有效路径是:
something.swf (no query string)
Run Code Online (Sandbox Code Playgroud)
和
something.swf?someparams...
Run Code Online (Sandbox Code Playgroud)
所以是的,理想情况下......告诉mod_rewrite:请不要查询字符串参数的urlencoding ...只需通过直接传递到新的URL R=302.
ano*_*one 101
实现这一目标的方法是通过NE(无逃脱)参数.
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
Run Code Online (Sandbox Code Playgroud)
实际上应该阅读
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L]
Run Code Online (Sandbox Code Playgroud)
这将强制mod_rewrite保留所有查询字符串值,而不进行任何编码/转义.
就这么简单:)
| 归档时间: |
|
| 查看次数: |
29866 次 |
| 最近记录: |