mod_rewrite 和 % 字符

mod_rewrite 和 % 字符

我需要将包含一个或多个以 % 字符结尾的字符串(例如 %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 字符。

相关内容