我需要将包含一个或多个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字符。