最近使用Apache的RewriteRule对URL进行跳转,突然有用户来报打不开页面。
查原因,发现原URL中有 changeboxid%5B%5D=958365 (changeboxid[]=958365)
结果Rewrite跳转时又转了一次,成了changeboxid%255B%255D=958365。
HOHO
使用NE标记解决。
RewriteCond %{QUERY_STRING} ^a=preship&.*$
RewriteRule ^(/cms/ticket.php.*)$ http://cms.test.com$1 [NE,L,R=301]
'noescape|NE
'(在输出中不对URI进行转义)
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符('%', '$', ';'等)会被转义为等值的十六进制编码('%25', '%24', '%3B'等)。此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,比如:
RewriteRule /foo/(.*) /bar?arg=P1/%3d$1 [R,NE]
参考URL:
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html