mod_rewrite RewriteCond - 仅域部分需要 NC 标志吗?还有一些

Posted

技术标签:

【中文标题】mod_rewrite RewriteCond - 仅域部分需要 NC 标志吗?还有一些【英文标题】:mod_rewrite RewriteCond - is NC flag necessary for just domain part? And some more 【发布时间】:2011-07-31 17:41:06 【问题描述】:

我在htaccess见过很多次这样的规则:

RewriteCond %HTTP_REFERER !^http://www.domain.it$ [NC]

RewriteCond %HTTP_HOST !^www\.domain\.it$ [NC]

为什么只检查域部分时需要NC 标志?

我注意到浏览器总是将域名中的大写字母转换为小写字母,所以我看不出在这种情况下[NC] 标志有什么用处。

我的意思是,如果我们检查 url 的其余部分,我了解在 Unix 系统上需要 [NC] 标志,因为 www.domain.com/index.htmlwww.domain.com/INDEX.HTML 是不同的文件,但我不明白 NC 标志的需要当我们只检查 RewriteRule 中的域部分时。


既然您花时间阅读了以上内容,让我再问一个小问题NC 标志没有直接关系,但仍与RewriteCond 相关

上面显示的RewriteCond 都可以正常工作,我认为只有在点之前有斜线的那个可以工作 (!^www\.domain\.it$) 因为没有斜线的点应该表示 'any char'在正则表达式中,\. 表示点字符,但令人惊讶的是另一个也很好用,你知道为什么吗?

【问题讨论】:

【参考方案1】:

[NC] 绝对不是强制性的,但建议使用它来匹配域。现代浏览器可能会将域名转换为小写,但旧浏览器和命令行工具(如wgetcurl 等)呢,因此您不应总是依赖客户端向您发送小写域名并保留[NC]

关于您的第二个问题 . 匹配 任何字符,因此它能够匹配 www.domain.com 但它也会匹配您不想匹配的 www-domain-com 文本。所以最好有www\.domain\.com

【讨论】:

谢谢。我想第二个总是有效的,因为它只应用于一个域,所以如果 osmeone 进入 www-domain-com 甚至根本无法到达该域。 顺便说一句,你知道如何回答这个问题***.com/questions/5279470/…【参考方案2】:

NC = nocase 表示无论传入引荐流量与给定模式匹配的情况。

见Apache [NC|nocase] flag

【讨论】:

【参考方案3】:

我不确定 [NC],但我想在某些不太可能发生的情况下 ENV var。可以包含大写字符。

正则表达式中的点表示一个字符,任何字符。所以如果字符串是http://www_domain-it 或http://wwwadomain1it,第一个条件也将匹配

【讨论】:

你解释的不是很好,但是看了你的回答我明白了,+1,谢谢!

以上是关于mod_rewrite RewriteCond - 仅域部分需要 NC 标志吗?还有一些的主要内容,如果未能解决你的问题,请参考以下文章

mod_rewrite RewriteCond 基于 Last-modified? (.htaccess)

只允许某些IP地址使用mod_rewrite访问网站?

RewriteCond 和RewriteRule规则说明 (转)

无法启用 mod_rewrite

Azure 中的 Mod_rewrite

mod_rewrite:删除尾部斜杠(只有一个!)