在使用htaccess的URL重写中编码特殊字符

我有一个重写规则如下,它正在工作:

RewriteRule area/(.*) listing.php?area=$1 

但是当我想用%29的时候,但是当我把它改写成如下时,我得到了404错误:

 RewriteRule area/something%29/(.*)/ listing.php?area=$1 

\%29转义%29也无效。

Apache% – 在尝试应用重写规则之前解析url路径。 所以你不应该在你的RewriteRule中使用%-encoding。 只要使用正常的字符。

所以在你的情况下,你应该只使用))但是在正则表达式中是一个特殊的字符,所以你应该通过在前面添加一个斜杠来以RegEx方式逃避那些。 所以它会成为\)

你的规则应该成为:

 RewriteRule area/something\)/(.*)/ listing.php?area=$1 

您要重写的网址无效,因为%29只能在Querystring中允许,而不能在URL中允许。 你需要将%25%(而不是反斜杠)转义出来,所以得到的表达式应该是…%2529 – 这应该起作用。

有关更深入的信息,请查看RFC2396 。