mod_rewrite - RewriteCond - 为什么需要比较语法?

4

我这里有三个条件,但我找不到它们之间的真正区别,因为它们都执行相同的工作:

RewriteCond %{HTTPS} !=on

RewriteCond %{HTTPS} =off

RewriteCond %{HTTPS} off

这个网站(http://httpd.apache.org/docs/current/mod/mod_rewrite.html)说:
语法: RewriteCond TestString CondPattern [flags] CondPattern通常是Perl兼容的正则表达式,但还有其他可用的语法来执行其他对Teststring的有用测试:
如果条件本身已经完成了与正则表达式的比较任务,为什么我需要额外的比较语法呢?
1个回答

2

它们不执行相同的工作。

Straight RewriteCond 假定条件表达式是正则表达式。

使用 =!= 的语法执行简单字符串比较。

在你的例子中,结果之所以相同,是因为你使用的字符串没有正则表达式语法

对此的混淆可能会导致错误和安全问题。

例如,攻击者可以通过发送带有 wwwXexample.com 的 "Host" 标头来利用下面的条件:

RewriteCond %{HTTP_HOST} www.example.com [NC]

以下条件仅在主机为www.example.com时匹配。

RewriteCond %{HTTP_HOST} =www.example.com [NC]

还有其他方面需要考虑,其中最重要的是性能:直接字符串比较比正则表达式匹配快得多。

经验法则:如果您想匹配模式,请使用正则表达式。否则,请使用精确的字符串比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接