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

时间:2012-01-11 16:14:24

标签: apache .htaccess character-encoding hebrew

我有一个重写规则如下,它正在运行:

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

但是当我想在其中使用%29时,但当我将其重写为以下内容时,我收到404错误:

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

%29转换为\%29也无效。

2 个答案:

答案 0 :(得分:2)

Apache% - 在尝试应用重写规则之前对url-path进行编码。所以你不应该在你的RewriteRule中使用%-encoding。只需使用普通字符即可。

因此,在您的情况下,您应该使用))但是在正则表达式中是一个特殊字符,因此您应该通过在前面添加斜杠来以RegEx方式转义它们。所以它会变成\)

您的上述规则应该成为:

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

答案 1 :(得分:0)

您要重写的URL无效,因为%29只允许在Querystring中使用,而不是URL。你需要将%转义为%25(而不是使用反斜杠),因此结果表达式将是...某些%2529 - 这应该有效。

有关详细信息,请查看RFC2396