两个规则在mod_rewrite中产生相同的结果

时间:2014-11-12 00:07:07

标签: regex apache .htaccess mod-rewrite

我使用127.0.0.1作为IP地址在家用计算机上进行了测试。我使用规则集制作了一些重写规则,如下所示:

RewriteEngine On
RewriteRule ^x\/x$ /letterx [NC,L]
RewriteRule ^y/y$ /lettery [NC,L]

当我进入浏览器并输入127.0.0.1/x/x时,我被重定向到127.0.0.1/letterx。 当我输入127.0.0.1/y/y时,我被重定向到127.0.0.1/lettery。

在线查看正则表达式的各种来源,没有文章声称/是一个需要转义的字符,但http://regex101.com/声称它确实存在。

为什么在这组代码中我都尝试重定向成功?难道不应该失败吗? mod_rewrite中是否有错误我不知道?您会认为基于许多网站,上面的第二行代码应该失败,第三行应该有效,但我很困惑。

1 个答案:

答案 0 :(得分:0)

默认情况下,regex101网站使用PCRE样式的正则表达式,由php使用,并且由两个/个字符分隔。例如:

/thisismyregex/

thisismyregex是由/分隔符包围的正则表达式,如果我想指定正则表达式标志,我会在最后/之后添加它们:

/thisiscaseinsensitive/i

因为PCRE样式正则表达式使用/作为分隔符,所以如果要匹配正则表达式中的/则需要将其转义

/this\/is\/my\/regex/i

将不区分大小写匹配:this/is/my/regex

但是,mod_rewrite 不使用PCRE样式的正则表达式分隔符,因此您不需要打扰转义/。在regex101网站上的示例中,将正则表达式样式切换为其他内容,无论是javascript还是python,您都会注意到您突然不再需要逃避/

  

是否有用于更改这些正则表达式分隔符的配置文件?

没有。但是你可以查看apache documentation for regex

相关问题