【问题标题】:Encoding special characters in url rewriting using htaccess使用 htaccess 在 url 重写中编码特殊字符
【发布时间】:2012-01-11 16:14:24
【问题描述】:

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

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

但是当我想在其中使用%29,但是当我将其重写如下时,我得到404错误:

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

%29 转义为\%29 也不起作用。

【问题讨论】:

    标签: apache .htaccess character-encoding hebrew


    【解决方案1】:

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

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

    你上面的规则应该变成:

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

    【讨论】:

    • 特殊字符也可以写成符号\x29。
    【解决方案2】:

    您要重写的 URL 无效,因为 %29 只允许在查询字符串中,而不是 URL。您需要将 % 转义为 %25 (而不是使用反斜杠),因此结果表达式将是 ...something%2529 - 这应该可以工作。

    更多详细信息请查看RFC2396

    【讨论】:

    • 感谢您的回答,但问题还没有解决。%29 只是一个例子。我想用这种方式编码希伯来字符。你能告诉为什么如何在 .htaccess 中使用 %encoded 字符url重写。
    • 我不太明白你到底想做什么。但是,您可以尝试使用 [B] 标志转义反向引用(假设您使用 Apache >= 2.2,我相信),或者使用 noescape 标志 [NE]。更多信息可以在这里找到:httpd.apache.org/docs/trunk/rewrite/flags.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2017-08-31
    • 2014-09-17
    • 2012-08-20
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多