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?
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
NC = nocase
signifie quel que soit le cas de la correspondance du trafic du référent entrant avec le modèle donné.
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