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。
怎样才能安全度过经期呢?(即不会引起一些随机副作用)
.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 的首选正则表达式方言。