Regex mod_rewrite RewriteCond-仅域部分需要NC标志吗?还有更多
我在Regex mod_rewrite RewriteCond-仅域部分需要NC标志吗?还有更多,regex,.htaccess,mod-rewrite,case-insensitive,Regex,.htaccess,Mod Rewrite,Case Insensitive,我在htaccess中多次看到这些类型的规则: RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC] 或 仅检查域部分时,为什么需要使用NC标志? 我注意到浏览器总是将域名中的大写字母转换为小写字母,所以我不知道在这种情况下,[NC]标志通常用于什么 我的意思是,如果我们检查url的其余部分,我理解需要[NC]标志,因为在Unix系统上www.domain.com/index.html与www.domain.com/index.htm
htaccess
中多次看到这些类型的规则:
RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
或
仅检查域部分时,为什么需要使用NC
标志?
我注意到浏览器总是将域名中的大写字母转换为小写字母,所以我不知道在这种情况下,[NC]
标志通常用于什么
我的意思是,如果我们检查url的其余部分,我理解需要[NC]
标志,因为在Unix系统上www.domain.com/index.html
与www.domain.com/index.html
不同,但是当我们只检查重写规则中的域部分时,我不理解需要NC
标志
由于您花了时间阅读上述内容,让我再问一个小问题与
NC
标志没有直接关系,但仍然与RewriteCond
上面显示的
RewriteCond
都能很好地工作,我认为只有在点之前加斜杠的那一个可以工作(!^www.domain\.it$
),因为在regexp中没有斜杠的点应该表示“any char”,而\.
表示点char,但令人惊讶的是,另一个也能很好地工作,你知道为什么吗?我不知道[NC]是什么,但我想在某些不太可能的情况下,ENV变量可能包含大写字符
正则表达式中的点表示一个字符,任何字符。因此,如果字符串是或具有[NC],则第一个条件也会匹配,这肯定不是强制性的,但建议将其用于匹配域。现代浏览器可能正在将域名转换为小写,但旧浏览器和命令行util(如
wget
,curl
等)又如何呢?因此,您不应该总是依赖客户端向您发送小写域名并保留[NC]
关于你的第二个问题
匹配任何字符,因此它可以匹配www.domain.com
,但它也会匹配www.domain.com
你不想匹配的文本。因此,最好让www\.domain\.com
NC=nocase
的意思是,不管传入的referer流量是否与给定模式匹配
见谢谢。我想第二个总是有效的,因为它只适用于一个域,所以如果osmeone-enetered www-domain-com根本无法到达该域。顺便问一句,你对如何回答这个问题有什么想法吗?你没有很好地解释,但我是在阅读了你的答案后得出这个想法的,+1,谢谢!
RewriteCond %{HTTP_HOST} !^www\.domain\.it$ [NC]