web-dev-qa-db-fra.com

mod_rewrite RewriteCond - le drapeau NC est-il nécessaire pour une partie de domaine uniquement? Et encore plus

J'ai vu plusieurs fois dans htaccess ce type de règles:

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

ou

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

Pourquoi le drapeau NC est-il nécessaire, lors de la vérification uniquement de la partie domaine?

J'ai remarqué les navigateurs convertissent toujours les majuscules des noms de domaine en minuscules, donc je ne vois pas ce que le [NC] le drapeau est utile dans ce cas.

Je veux dire que si nous vérifions la partie restante de l'URL, je comprends la nécessité de [NC] cause du drapeau sur les systèmes Unix www.domain.com/index.html est un fichier différent de www.domain.com/INDEX.HTML mais je ne comprends pas la nécessité du drapeau NC lorsque nous vérifions uniquement la partie domaine dans RewriteRule.


Puisque vous avez pris le temps de lire ce qui précède, permettez-moi de poser également une question mineure pas directement lié à l'indicateur NC, mais toujours lié à RewriteCond

Les deux RewriteCond montrés ci-dessus fonctionnent bien, je pensais que seul celui avec une barre oblique avant que les points ne fonctionnent (!^www\.domain\.it$) parce que le point sans barre oblique doit signifier 'tout caractère' dans l'expression rationnelle la plus longue \. signifie le point char, mais étonnamment aussi l'autre fonctionne bien, savez-vous pourquoi?

34
Marco Demaio

Ayant [NC] n'est certainement pas obligatoire mais il est recommandé de l'avoir pour les domaines correspondants. Les navigateurs modernes convertissent peut-être les noms de domaine en minuscules, mais qu'en est-il des anciens navigateurs et des utilitaires de ligne de commande tels que wget, curl etc., vous ne devez donc pas toujours compter sur les clients qui vous envoient un nom de domaine en minuscules et conserver [NC].

À propos de votre 2e question . correspond à n'importe quel caractère il peut donc correspondre à www.domain.com mais il correspondra également à www-domain-com texte auquel vous ne voulez pas correspondre. Il vaut donc mieux avoir www\.domain\.com

39
anubhava

NC = nocase signifie quel que soit le cas de la correspondance du trafic du référent entrant avec le modèle donné.

Voir drapeau Apache [NC | nocase]

8
Yarob Al-Taay

Je ne connais pas le [NC] à coup sûr, mais je suppose que dans un événement peu probable, le var ENV. pourrait contenir des caractères majuscules.

Un point dans une expression régulière signifie un caractère, n'importe quel caractère. SO la première condition correspondrait également si la chaîne est http: // www_domain-it ou http: // wwwadomain1it

3
sauerburger