安全转义 .htaccess mod_rewrite 正则表达式中的句点/点 (.) 字符

Nik*_*a 웃 3 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]
Run Code Online (Sandbox Code Playgroud)

所以网址是这样的:

http://example.com//index.php?cPath=44_95&page=1&range=1.99_2.99
Run Code Online (Sandbox Code Playgroud)

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

怎样才能安全度过经期呢?(即不会引起一些随机副作用)

hak*_*kre 6

.htaccess 正则表达式的标准转义字符是斜杠 (" \")。

  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]
                                       ^^
Run Code Online (Sandbox Code Playgroud)

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

评论中给出的另一个建议是创建一个仅由点(“ [.]”)组成的字符类,也可以完成这项工作,但是当您只想命名单个字符时创建一个字符类可能有点过分了。但它在技术上是有效的(并且例如在 Apache mod_rewrite 中的转义点中被建议)。

顺便说一句:Apache 重写使用 Perl 兼容正则表达式 (PCRE),它与 ​​PHP 在函数系列中使用的正则表达式风格相同,preg_*这是 PHP 的首选正则表达式方言。