我在htaccess
这些规则中多次见过:
RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
或
RewriteCond %{HTTP_HOST} !^www\.domain\.it$ [NC]
在仅检查域部分时,为什么需要NC
标记?
我注意到浏览器总是会将域名中的大写字母转换为小写,所以在这种情况下,我看不到[NC]
标记的用途是什么。
我的意思是,如果我们检查网址的剩余部分,我理解在{@ 1}}上需要[NC]
标志因为www.domain.com/index.html
文件与www.domain.com/INDEX.HTML
不同,但我不明白当我们只检查RewriteRule中的域部分时,需要NC
标志。
由于您花时间阅读上述内容,我还要问一个小问题与NC
标志没有直接关系,但仍然与RewriteCond
上面显示的RewriteCond
都运行良好,我认为只有点之前的斜线才会起作用(!^www\.domain\.it$
),因为没有斜线的点应该表示'any char' 在正则表达式中,\.
表示点字符,但另一个表现也很好,你知道为什么吗?
答案 0 :(得分:39)
拥有[NC]
绝对不是强制性的,但建议将其用于匹配域。现代浏览器可能会将域名转换为小写但是旧浏览器和命令行工具如wget
,curl
等等,所以你不应该总是依赖客户端发送小写域名并保持{{1 }}
关于您的第二个问题[NC]
匹配任何字符,因此它可以与.
匹配,但它也会匹配您不想要的www.domain.com
文字匹配。所以最好有www-domain-com
答案 1 :(得分:8)
NC = nocase
表示无论传入的引荐来源流量与给定模式的匹配情况如何。
答案 2 :(得分:3)
我不确定[NC],但我认为在某些不太可能的情况下,ENV var。可以包含大写字母。
正则表达式中的点表示一个字符,任何字符。因此,如果字符串为http://www_domain-it或http://wwwadomain1it
,则第一个条件也会匹配