【发布时间】:2014-11-12 09:56:52
【问题描述】:
我使用 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/ 声称确实如此。
为什么在这组代码中我尝试重定向成功的两个 url?不应该失败吗? mod_rewrite 中是否有我不知道的错误?根据很多网站,你会认为上面的第二行代码应该失败,而第三行应该可以工作,但我很困惑。
【问题讨论】:
-
@Prix 你对 PCRE 的看法是对的,但
/不是特殊含义的字符,不需要转义。唯一需要转义的情况是正则表达式分隔符设置为/... -
@hwnd 是的,它不需要转义,因为 mod_rewrite 通过更改默认修饰符或出于安全或任何原因预先转义
/使用的任何方法。 但是,您回答的措辞不正确,并且对/在 PCRE 方面的含义有错误的感觉。 -
是否有配置文件可用于更改这些正则表达式分隔符?
-
@Mike 不是我所知道的,但您可以放心地假设
/不需要在mod_rewrite和.htaccess中转义,在大多数情况下(如果不是全部)它与 @987654331 一起使用@ 或.htaccess.
标签: regex apache .htaccess mod-rewrite