Prefacio
Soy muy neófito con respecto a los servidores web. Estoy configurando un servidor Apache2 y actualmente revisando detenidamente la documentación.
Me di cuenta de que el <Directory>
, <Location>
y <Files>
las directivas de cada una correspondiente <*Match>
Directiva: <DirectoryMatch>
, <LocationMatch>
y <FilesMatch>
respectivamente. La diferencia en la superficie es bastante evidente:
<*Match>
las directivas toman una expresión regular como argumento- Las directivas que no coinciden toman una cadena simple o un globo de estilo shell como argumento.
Curiosamente, las directivas que no coinciden también pueden recibir una expresión regular como argumento si está precedido por un '~'. Por lo tanto, las siguientes dos líneas deberían ser idénticas:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Preguntas
Lo que me gustaría saber es si hay o no diferencias sutiles o clave para tener en cuenta que los core
documentos de Apache no mencionan. La <DirectoryMatch>
sección menciona una sutil diferencia:
Compatibilidad
Antes de 2.3.9 , esta directiva se aplicaba implícitamente a subdirectorios (como
<Directory>
) y no podía coincidir con el símbolo de fin de línea ($). En 2.3.9 y posteriores , solo los directorios que coinciden con la expresión se ven afectados por las directivas adjuntas.
Más allá de eso, me gustaría saber:
- ¿Hay alguna otra diferencia entre las directivas Match y no Match?
- ¿Qué directiva es más preferible cuando se requiere una expresión regular?
- ¿Alguna otra información que considere pertinente?
Notas
<DirectoryMatch>
y<Directory "~">
están en el mismo nivel de fusión- Si bien no se menciona explícitamente,
<Directory "~">
puede usar grupos con nombre y referencias posteriores, al igual que<DirectoryMatch>
.
<Directory ~
y<DirectoryMatch
no<Directory
. Hasta Apache 2.3.9,<Directory ~
era posiblemente el superconjunto porque soportaba el$
anclaje regex, mientras<DirectoryMatch
que no. (Esto también puede haber sido por qué la recomendación de usarDirectoryMatch
se eliminó en los documentos anteriores?)