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 coredocumentos 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<DirectoryMatchno<Directory. Hasta Apache 2.3.9,<Directory ~era posiblemente el superconjunto porque soportaba el$anclaje regex, mientras<DirectoryMatchque no. (Esto también puede haber sido por qué la recomendación de usarDirectoryMatchse eliminó en los documentos anteriores?)