Saefely在.htaccess mod_rewrite正则表达式中转义句点(。)字符

时间:2015-12-25 15:52:33

标签: php regex apache .htaccess mod-rewrite

我的.htaccess文件是由我的osCommerce网站上安装的高级SEO URL php系统使用的。 它具有以下规则,适用于大多数情况,但从我的GET参数中删除句点:

  RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+).html$ index.php [NC,L,QSA]
  RewriteRule ^([a-z0-9/-]+)-m-([0-9]+).html$ index.php [NC,L,QSA]

所以这样的网址:

http://example.com//index.php?cPath=44_95&page=1&range=1.99_2.99

根据规则重写,1.99_2.99变为199_299

如何安全地逃离这段时间? (即没有引起一些随机副作用)

1 个答案:

答案 0 :(得分:3)

.htaccess正则表达式的标准转义字符是斜杠(&#34; <ul> <li><a href="#">About</a></li> <li><a href="#cases">Cases</a></li> <li><a href="http://www.contact.dk">Contact</a></li> </ul> &#34;)。

\

斜线将阻止点的含义并将其转义,以便将点作为要匹配的字符逐字记录(句点,ASCII码46 / x2E)。

评论中给出的另一个建议是创建一个仅由点组成的字符类(&#34; RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+)\.html$ index.php [NC,L,QSA] ^^ RewriteRule ^([a-z0-9/-]+)-m-([0-9]+)\.html$ index.php [NC,L,QSA] ^^ &#34;)也可以完成这项工作,但它可能有点像在顶部创建一个字符类,而您只想命名一个字符。但它在技术上有效(例如在[{3}}中提出过建议。)

顺便说一句:escaping dot in Apache mod_rewrite这与正如PHP的正则表达式相同,正在使用[.]函数系列,这是PHP的首选正则表达方言。