Je vois des tonnes d'exemples de .htaccess
contenant l'indicateur [NC]
(NoCase = insensible à la casse)
Par exemple, la célèbre page h5bp utilise beaucoup le drapeau [NC]
:
https://github.com/h5bp/server-configs-Apache/blob/master/dist/.htaccess
Presque tous les exemples placent l'indicateur [NC]
à la fin de la directive RewriteCond
.
Mais le Documentation officielle indique clairement qu'il n'est utilisé que pour la directive RewriteRule
.
99% des exemples sont-ils incorrects?
La documentation officielle est-elle fausse ou incomplète?
Mais la documentation officielle indique clairement qu'elle est utilisée uniquement pour la directive RewriteRule.
Les documents ne disent pas qu'il peut niquement être utilisé sur la directive RewriteRule
name__. La page vers laquelle vous créez un lien (qui concerne en passant les indicateurs RewriteRule
name__) indique simplement:
L'utilisation de l'indicateur [NC] entraîne la correspondance de RewriteRule sans tenir compte de la casse.
Les docs de la directive RewriteCond
name__ incluent une section sur les drapeaux pouvant être utilisés avec cette directive. Et ceux-ci incluent NC
name__, OR
et NV
name__. L'indicateur NC
est commun aux deux directives.
Si vous avez utilisé un indicateur non valide pour la directive RewriteCond
name__, vous obtiendrez une erreur 500 Internal Server. Et si vous examinez le journal des erreurs du serveur, vous devriez voir quelque chose à propos des "drapeaux invalides".
Cependant, (un peu de côté), l'indicateur NC
est généralement trop utilisé. Les gens l'incluent souvent par défaut, quand ce n'est vraiment pas nécessaire (ou pire, causera réellement des problèmes).
UPDATE: Je ne sais pas si le document lié a été mis à jour ces dernières années, mais il n'y a que 3 cas d'utilisation de l'indicateur NC
avec la directive RewriteCond
name__. Les 2 premiers sont certainement justifiés, le 3ème est discutable à l'OMI.
#376 RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
Lors de la résolution du nom d'hôte (valeur de l'en-tête Host
name__), il convient de toujours comparer sans tenir compte de la casse (conformément à la spécification HTTP). Tous les navigateurs classiques insèrent l’en-tête Host
lors de la requête. Cependant, d'autres utilisateurs-agents (et bots) peuvent ne pas le faire et mod_rewrite comparera naturellement cette distinction au cas par cas. Cela ne signifie pas nécessairement que vous devriez toujours utiliser l'indicateur NC
car cela dépend de ce que vous faites exactement.
Toutefois, l'indicateur NC
est justifié ici car l'objectif de cette règle est de supprimer le sous-domaine www
name__, qu'il s'agisse de www
name__, wWw
ou WWW
name__. Sans l'indicateur NC
name__, un agent utilisateur (malveillant) pourrait envoyer WWW.EXAMPLE.COM
et contourner la redirection canonique vers l'apex du domaine.
#408 RewriteCond %{HTTP_Host} !^www\. [NC]
Notez que ceci est un regex negated (désigné par le préfixe !
). Le but de cette règle est de rediriger du sommet du domaine vers le sous-domaine www
name__. L'indicateur NC
est justifié ici, car vous souhaitez empêcher la redirection lorsque l'en-tête Host
commence par www
ou WWW
etc. Sinon, vous pourriez potentiellement obtenir une redirection mal formée telle que www.WWW.example.com
.
#564 RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
L'utilisation de l'indicateur NC
est un sujet à débattre IMO. Le but de ce bloc de règles est de bloquer l’accès aux fichiers point et aux répertoires, à l’exception du répertoire .well-known
. Dans le meilleur des cas, il est probablement superflu. Cependant, il contredit les conditions similaires utilisées précédemment dans le fichier (lignes n ° 345 à 7) qui n'utilisent pas l'indicateur NC
name__.
Le répertoire .well-known
devrait toujours être en minuscule. Donc, le NC
flag devrait être superflu. Cependant, en incluant ici le drapeau NC
name__, nous finissons par permettre (ne pas bloquer) les requêtes de la forme .WELL-KNOWN
- qui risquent de toute façon d’échouer étant donné que nous sommes probablement sous Linux, qui respecte le casse.