Préface
Je suis très néophyte des serveurs Web. J'installe un serveur Apache2 et examine actuellement la documentation.
J'ai remarqué que la <Directory>
, <Location>
et les <Files>
directives ont chacune une correspondante <*Match>
directive: <DirectoryMatch>
, <LocationMatch>
et <FilesMatch>
respectivement. La différence en surface est assez apparente:
<*Match>
les directives prennent une expression régulière comme argument- Les directives non-Match prennent comme argument une chaîne simple ou un glob de style shell.
Curieusement, les directives non-Match peuvent également recevoir une expression régulière comme argument si elle est précédée d'un '~'. Ainsi, les deux lignes suivantes doivent être identiques:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Des questions
Ce que j'aimerais savoir, c'est s'il y a ou non des différences subtiles ou clés à savoir que les core
documents d'Apache ne mentionnent pas. La <DirectoryMatch>
section mentionne une différence subtile:
Compatibilité
Avant la 2.3.9 , cette directive s'appliquait implicitement aux sous-répertoires (comme
<Directory>
) et ne pouvait pas correspondre au symbole de fin de ligne ($). Dans 2.3.9 et versions ultérieures , seuls les répertoires qui correspondent à l'expression sont affectés par les directives jointes.
Au-delà, j'aimerais savoir:
- Existe-t-il d'autres différences entre les directives Match et non-Match?
- Quelle directive est plus préférable lorsqu'une expression régulière est requise?
- Avez-vous d'autres informations pertinentes?
Remarques
<DirectoryMatch>
et<Directory "~">
sont au même niveau de fusion- Bien qu'il ne soit pas explicitement mentionné, il
<Directory "~">
peut utiliser des groupes nommés et des références arrières, tout comme<DirectoryMatch>
.
<Directory ~
et<DirectoryMatch
non<Directory
. Jusqu'à Apache 2.3.9,<Directory ~
était sans doute le sur-ensemble car il supportait l'$
ancre regex, alors<DirectoryMatch
que non. (C'est peut-être aussi la raison pour laquelle la recommandation d'utilisation aDirectoryMatch
été supprimée dans les documents précédents?)