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.html
与 www.domain.com/INDEX.HTML
是不同的文件,但我不明白 NC
标志的需要当我们只检查 RewriteRule 中的域部分时。
既然您花时间阅读了以上内容,让我再问一个小问题 与NC
标志没有直接关系,但仍与RewriteCond
相关
上面显示的RewriteCond
都可以正常工作,我认为只有在点之前有斜线的那个可以工作 (!^www\.domain\.it$
) 因为没有斜线的点应该表示 'any char'在正则表达式中,\.
表示点字符,但令人惊讶的是另一个也很好用,你知道为什么吗?
【问题讨论】:
【参考方案1】:[NC]
绝对不是强制性的,但建议使用它来匹配域。现代浏览器可能会将域名转换为小写,但旧浏览器和命令行工具(如wget
、curl
等)呢,因此您不应总是依赖客户端向您发送小写域名并保留[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)