mod_rewrite和%字符

我需要将包含一个或多个string(包括%字符)(例如%123)的string重写为另一个包含%字符(例如%234)的string。

我可以用这样的特殊的THE_REQUEST属性来做到这一点:

RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /(.*)\%123(.*)\ HTTP RewriteRule .* /%1\%234%2 [R,NE] 

但是,对于包含多个“%123”string的URL,这不起作用… N选项没有效果,因为看起来THE_REQUEST的值没有改变。

有任何想法吗?

从我能告诉你只能在请求的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部分执行这种types的replace。 当mod_rewrite收到REQUEST_URI所有的百分号都被转换了。 例如,如果REQUEST_URI包含%12它看起来mod_rewrite为control-R(0x12),似乎没有任何方法可以匹配mod_rewrite中的非ASCII字符。