我需要将包含一个或多个以 % 字符结尾的字符串(例如 %123)的 URL 重写为另一个包含 % 字符的字符串(例如 %234)。
我可以使用特殊的 THE_REQUEST 属性来做到这一点,如下所示:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\%123(.*)\ HTTP
RewriteRule .* /%1\%234%2 [R,NE]
但是,这对于包含多个“%123”字符串的 URL 不起作用...N 选项没有效果,因为 THE_REQUEST 的值似乎没有改变。
有任何想法吗?
答案1
据我所知,您只能在QUERY_STRING
请求的部分执行替换。因此:
RewriteCond %{QUERY_STRING} ^(.*\%)123(.*)$
RewriteRule ^(.*)$ $1?%1234%2 [NE,N]
将重写如下 URL:
/our/example?this%123is%123a%123test
到:
/our/example?this%234is%234a%234test
但是,没有办法对REQUEST_URI
查询的部分执行这种类型的替换。当 mod_rewrite 收到时,REQUEST_URI
所有百分号都已转换。例如,如果REQUEST_URI
包含%12
,则它在 mod_rewrite 中显示为 control-R (0x12),并且似乎没有任何方法可以在 mod_rewrite 中匹配非 ASCII 字符。