Prefazione
Sono un neofita per quanto riguarda i server web. Sto configurando un server Apache2 e attualmente sto esaminando la documentazione.
Ho notato che il <Directory>
, <Location>
e <Files>
direttive hanno ciascuno un corrispondente <*Match>
direttiva: <DirectoryMatch>
, <LocationMatch>
e <FilesMatch>
rispettivamente. La differenza sulla superficie è abbastanza evidente:
<*Match>
le direttive assumono un'espressione regolare come argomento- Le direttive non match prendono come argomento una stringa semplice o un glob in stile shell.
Curiosamente, le direttive non-Match possono anche essere date come espressione regolare come argomento se precedute da un '~'. Pertanto, le seguenti due righe dovrebbero essere identiche:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Domande
Quello che mi piacerebbe sapere è se ci sono o meno differenze sottili o chiave da tenere presente che i core
documenti di Apache non menzionano. La <DirectoryMatch>
sezione menziona una sottile differenza:
Compatibilità
Prima della 2.3.9 , questa direttiva si applicava implicitamente alle sottodirectory (come
<Directory>
) e non poteva corrispondere al simbolo di fine riga ($). In 2.3.9 e versioni successive , solo le directory che corrispondono all'espressione sono interessate dalle direttive allegate.
Oltre a ciò, vorrei sapere:
- Ci sono altre differenze tra le direttive Match e non Match?
- Quale direttiva è più preferibile quando è richiesta un'espressione regolare?
- Altre informazioni che ritieni pertinenti?
Appunti
<DirectoryMatch>
e<Directory "~">
sono allo stesso livello di unione- Sebbene non esplicitamente menzionato, è
<Directory "~">
possibile utilizzare gruppi denominati e riferimenti secondari, proprio come<DirectoryMatch>
.
<Directory ~
e<DirectoryMatch
non<Directory
. Fino ad Apache 2.3.9,<Directory ~
era probabilmente il superset perché supportava l'$
ancoraggio regex, mentre<DirectoryMatch
non lo era. (Questo potrebbe anche essere stato il motivo per cui la raccomandazione di utilizzare èDirectoryMatch
stata rimossa nei documenti precedenti?)