Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex mod_rewrite RewriteCond-仅域部分需要NC标志吗?还有更多_Regex_.htaccess_Mod Rewrite_Case Insensitive - Fatal编程技术网

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]