我有一个重写规则如下,它正在工作:
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 。