【问题标题】:Do you have to escape a forward slash when using mod_rewrite?使用 mod_rewrite 时是否必须转义正斜杠?
【发布时间】:2011-04-05 05:20:13
【问题描述】:

关于向 RewriteRule 或 RewriteCond 提供正则表达式时的正斜杠“/”,或者特别是与 .htaccess 相关的任何其他内容,是否需要转义正斜杠?

这是我想要实现的一个示例

RewriteEngine on
RewriteOptions inherit

RewriteBase /uk-m-directory/
RewriteRule ^(region|region\/|regions\/)$ regions [R=301,L]
RewriteRule ^(county|county\/|counties\/)$ counties [R=301,L]
RewriteRule ^(city|city\/|cities\/)$ cities [R=301,L]

上面的工作正常,当我删除反斜杠时它继续正常工作,如下所示

RewriteEngine on
RewriteOptions inherit

RewriteBase /uk-m-directory/
RewriteRule ^(region|region/|regions/)$ regions [R=301,L]
RewriteRule ^(county|county/|counties/)$ counties [R=301,L]
RewriteRule ^(city|city/|cities/)$ cities [R=301,L]

哪一种方法是正确的?他们都错了吗? 是否有任何特殊原因应该转义或不应该转义正斜杠?

据我所知,我的猜测是不需要转义正斜杠,因为它不是特殊字符。但我只是想确定一下。

如果您想知道这段代码的意义,它会将城市、县和地区(带或不带正斜杠)重定向到它们的复数等价物。此外,如果复数有一个正斜杠,它会删除正斜杠。

【问题讨论】:

    标签: .htaccess mod-rewrite escaping


    【解决方案1】:

    不,您不必转义斜线。正斜杠在正则表达式中没有任何特殊含义。

    过去困扰我的一个常见字符是查询字符串中的?。你必须逃脱的那个。

    【讨论】:

    • 非常感谢约翰的快速回复 =D 一个快速补充问题约翰,如果你不介意,关于你的“?”评论。我知道它必须被转义(问号)但如果它在规则的右侧怎么办?例如说“RewriteRule ^/([a-z0-9]+)$ /index.php?query=$1”右侧的问号(index.php?)是否必须转义?我知道不一定是这样,但你知道,只是确保。
    • 再次更正。仅在左侧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多