Vorwort
Ich bin ein Neuling in Bezug auf Webserver. Ich richte einen Apache2-Server ein und stöbere gerade in der Dokumentation.
Ich bemerkte , dass die <Directory>
, <Location>
und <Files>
Richtlinien haben jeweils eine entsprechende <*Match>
Richtlinie: <DirectoryMatch>
, <LocationMatch>
und <FilesMatch>
jeweils. Der Unterschied an der Oberfläche ist offensichtlich genug:
<*Match>
Direktiven nehmen einen regulären Ausdruck als Argument- Nicht übereinstimmende Direktiven verwenden eine einfache Zeichenfolge oder einen Glob im Shell-Stil als Argument.
Seltsamerweise kann den Nicht-Match-Direktiven auch ein regulärer Ausdruck als Argument gegeben werden, wenn ein '~' vorangestellt ist. Daher sollten die folgenden zwei Zeilen identisch sein:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Fragen
Ich würde gerne wissen, ob es subtile oder wichtige Unterschiede gibt, die zu beachten sind, dass die core
Dokumente von Apache nicht erwähnt werden. Der <DirectoryMatch>
Abschnitt erwähnt einen subtilen Unterschied:
Kompatibilität
Vor 2.3.9 galt diese Direktive implizit für Unterverzeichnisse (wie
<Directory>
) und konnte nicht mit dem Zeilenende-Symbol ($) übereinstimmen. In Version 2.3.9 und höher sind nur Verzeichnisse, die dem Ausdruck entsprechen, von den beigefügten Anweisungen betroffen.
Darüber hinaus würde ich gerne wissen:
- Gibt es weitere Unterschiede zwischen den Match- und Nicht-Match-Richtlinien?
- Welche Direktive ist vorzuziehen, wenn ein regulärer Ausdruck erforderlich ist?
- Sind andere Informationen Ihrer Meinung nach relevant?
Anmerkungen
<DirectoryMatch>
und<Directory "~">
sind auf der gleichen Zusammenführungsebene- Obwohl nicht explizit erwähnt,
<Directory "~">
können benannte Gruppen und Rückreferenzen verwendet werden, genau wie<DirectoryMatch>
.
<Directory ~
und<DirectoryMatch
nicht<Directory
. Bis Apache 2.3.9<Directory ~
war wohl die Obermenge, weil es den$
Regex-Anker unterstützte, während<DirectoryMatch
dies nicht der Fall war . (Dies könnte auch der Grund gewesen sein, warum die Empfehlung zur VerwendungDirectoryMatch
in den früheren Dokumenten entfernt wurde?)