使用mod_rewrite时是否必须转义正斜杠?

时间:2010-08-28 16:10:36

标签: .htaccess mod-rewrite escaping

关于向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]

哪一个是正确的方法?他们都错了吗? 是否有任何特殊原因应该逃避正斜杠,或者不应该这样做?

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

如果您想知道此代码的含义,它会将城市,县和地区(带或不带正斜杠)重定向到其复数等值。此外,如果复数具有正斜杠,则会删除正斜杠。

1 个答案:

答案 0 :(得分:18)

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

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