mod_rewrite RewriteCond - 只是域名部分所需的NC标志?还有一些

Mar*_*aio 35 regex .htaccess mod-rewrite case-insensitive

我在htaccess这些类型的规则中多次看到过:

RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
Run Code Online (Sandbox Code Playgroud)

要么

RewriteCond %{HTTP_HOST} !^www\.domain\.it$ [NC]
Run Code Online (Sandbox Code Playgroud)

NC当仅检查域部分时,为什么标记是必需的?

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

我的意思是,如果我们检查网址的剩余部分,我理解[NC]在Unix系统上标记原因的需要www.domain.com/index.html是不同的文件,www.domain.com/INDEX.HTML但是NC当我们只检查RewriteRule中的域部分时,我不理解标记的需要.


由于您花时间阅读上述内容,我还要问一个NC旗帜没有直接关系但与之相关的小问题RewriteCond

RewriteCond上面显示的两个都运行良好,我认为只有点之前的斜线才能工作(!^www\.domain\.it$)因为没有斜线的点应该表示正则表达式中的"任何字符",而\.意思是点字符,但是另外一个表示效果很好,但是你知道为什么?

anu*_*ava 40

拥有[NC]绝对不是强制性的,但建议把它匹配域.现代浏览器可能将域名转换为小写但对于旧的浏览器和命令行utils的喜欢wget,curl等等,所以你不应该总是依赖于客户端发送您小写字母的域名,并保持[NC].

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


小智 9

NC = nocase 无论传入的引用者流量与给定模式匹配的情况如何.

请参见Apache [NC | nocase]标志