Prefácio
Sou um neófito em relação aos servidores da web. Estou configurando um servidor Apache2 e atualmente examinando a documentação.
Notei que o <Directory>
, <Location>
e <Files>
directivas cada um tem um correspondente <*Match>
directiva: <DirectoryMatch>
, <LocationMatch>
e <FilesMatch>
respectivamente. A diferença na superfície é aparente o suficiente:
<*Match>
diretivas usam uma expressão regular como argumento- As diretivas não correspondentes consideram uma cadeia simples ou um estilo de shell como argumento.
Curiosamente, as diretivas que não são de correspondência também podem receber uma expressão regular como argumento se forem precedidas por um '~'. Assim, as duas linhas a seguir devem ser idênticas:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Questões
O que eu gostaria de saber é se há ou não diferenças sutis ou importantes que os core
documentos do Apache não mencionam. A <DirectoryMatch>
seção menciona uma diferença sutil:
Compatibilidade
Antes da 2.3.9 , esta diretiva aplicava-se implicitamente aos subdiretórios (como
<Directory>
) e não podia corresponder ao símbolo de fim de linha ($). No 2.3.9 e posterior , apenas os diretórios que correspondem à expressão são afetados pelas diretivas incluídas.
Além disso, gostaria de saber:
- Existem outras diferenças entre as diretivas de correspondência e não de correspondência?
- Qual diretiva é mais preferível quando uma expressão regular é necessária?
- Alguma outra informação que considere pertinente?
Notas
<DirectoryMatch>
e<Directory "~">
estão no mesmo nível de mesclagem- Embora não mencionado explicitamente,
<Directory "~">
pode usar grupos nomeados e referências anteriores, assim como<DirectoryMatch>
.
<Directory ~
e<DirectoryMatch
, não<Directory
. Até o Apache 2.3.9,<Directory ~
era indiscutivelmente o superconjunto, porque suportava a$
âncora regex, enquanto<DirectoryMatch
que não. (Isso também pode ter sido por isso a recomendação de usoDirectoryMatch
foi removido nos docs anteriores?)