我的.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
如何安全地逃离这段时间? (即没有引起一些随机副作用)
答案 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的首选正则表达方言。