我有一个重写规则如下,它正在运行:
RewriteRule area/(.*) listing.php?area=$1
但是当我想在其中使用%29
时,但当我将其重写为以下内容时,我收到404错误:
RewriteRule area/something%29/(.*)/ listing.php?area=$1
将%29
转换为\%29
也无效。
答案 0 :(得分:2)
Apache% - 在尝试应用重写规则之前对url-path进行编码。所以你不应该在你的RewriteRule中使用%-encoding。只需使用普通字符即可。
因此,在您的情况下,您应该使用)
。 )
但是在正则表达式中是一个特殊字符,因此您应该通过在前面添加斜杠来以RegEx方式转义它们。所以它会变成\)
。
您的上述规则应该成为:
RewriteRule area/something\)/(.*)/ listing.php?area=$1
答案 1 :(得分:0)
您要重写的URL无效,因为%29只允许在Querystring中使用,而不是URL。你需要将%转义为%25(而不是使用反斜杠),因此结果表达式将是...某些%2529 - 这应该有效。
有关详细信息,请查看RFC2396。