mod_rewrite RewriteCond - is NC flag necessary for just domain part? And some more

。_饼干妹妹 提交于 2019-11-28 22:09:01

问题


I have seen many times in htaccess these type of rules :

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

or

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

Why is the NC flag necessary, when checking only the domain part?

I noticed browsers always converts uppercases in domain names into lower cases, so I don't see what the [NC] flag is usueful for in this case.

I mean if we check the remaining part of the url I understand the need for [NC] flag cause on Unix systems www.domain.com/index.html is different file than www.domain.com/INDEX.HTML but I don't understand the need of NC flag when we check only the domain part in the RewriteRule.


Since you took the time to read the above, let me ask also one minor question not directly related to NC flag, but still related to RewriteCond

Both RewriteCond shown above work well, I thought only the one with slash before dots would work (!^www\.domain\.it$) because the dot without a slash should mean 'any char' in regexp whilest the \. means the dot char, but surpraisingly also the other one works well, do you know why?


回答1:


Having [NC] is definitely not mandatory but it is recommended to have it for matching domains. Modern browsers might be converting domain names to lowercase but what about old browsers and command line utils like wget, curl etc, so you should not always rely on clients sending you lowercase domain name and keep [NC].

About your 2nd question . matches any character therefore it is able to match www.domain.com but it will also match www-domain-com text which you don't want to match. So it is better to have www\.domain\.com




回答2:


NC = nocase means regardless of the case of the incoming referrer traffic match with the given pattern.

See Apache [NC|nocase] flag




回答3:


I don't know the [NC] for sure, but I suppose that in some unlikely event the the ENV var. could contain upper case chars.

A dot in a regular expression means one character, any character. SO the first condition would also match if the string is http://www_domain-it or http://wwwadomain1it



来源:https://stackoverflow.com/questions/5582286/mod-rewrite-rewritecond-is-nc-flag-necessary-for-just-domain-part-and-some-mo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!