Syntax: location [=|~|~*|^~|@] /uri/ { … }
Voreinstellung: no
Kontext: server
Diese Direktive erlaubt unterschiedliche Konfigurationen bei URL. Es kann mit beiden Zeichenketten und regulären Ausdrücken konfiguriert werden. Um die regulären Ausdrücke zu verwenden, müssen Sie eine Präfix benutzen:
- “~” Unterscheidung zwischen Groß- und Kleinschreibung notwendig
- “~*” Unterscheidung zwischen Groß- und Kleinschreibung nicht notwendig
Um festzustellen, bei welcher Position die Direktive bei der bestimmten Abfrage übereinstimmt, werden die Zeichenketten zunächst überprüft. Literale Zeichenfolgen beginnen mit der Abfrage – die passendste Übereinstimmung wird verwendet. Danach werden reguläre Ausdrücke in der Reihenfolge, in der Konfigurationsdatei definiert und geprüft. Wenn die ersten regulären Ausdrücke passen, wird die Suche abgebrochen. Wenn keine regulären Ausdrücke gefunden werden, wird das Ergebnis aus der literalen Zeichenfolge verwendet.
Für Groß- und Kleinschreibungs-Betriebssysteme wie Mac OS X oder Windows mit Cygwin wird die literale Zeichenkette in einer Groß-und Kleinschreibung (0.7.7) durchgeführt. Allerding ist der Verglech zu Single-Byte-Locale nur begrenzt.
Es ist möglich diese regulären Ausdrücke zu deaktivieren, nachdem mit Hilfe der literalen Zeichekette von “^~” Präfix geprüft wurde. Wenn die beste Entsprechung diesen Präfix hat, werden die regulären Ausdrücke nicht überprüft.
Bei der Benutzung von “=” Präfix wird die exakte Übereinstimmung zwischen Anforderungs-URL und Standort definiert. Wenn die Suche erfolgreich war, stoppt sie sofort. Zum Beispiel wenn die Anfrage “/” häufig auftritt, mit “location = /” beschleunigt sich die Bearbeitung dieser Anfrage ein bisschen und die Suche wird nach erstem Vergleich stoppen.
Auf exakte Übereinstimmung mit der Location ohne “=” oder “^~” Präfixe, wird die Suche direkt wieder abgebrochen.
Zusammenfassend ist die Reihenfolge, in der die Direktive überprüft werden wie folgt:
- Direktive mit dem “=” Präfix, sucht nach übereinstimmender Abfrage. Wenn sie gefunden wurde, stoppt die Suche.
- Alle übrigen Direktive mit herkömmlichen Seiten. Wenn der Treffer gefunden wurde “^~”Präfix, stoppt der Suchlauf.
- Reguläre Ausdrücke in der Reihenfolge werden in der Konfigurationsdatei definiert.
- Bei Übereinstimmung von (3) wird das Ergebnis verwendet. Ansonsten wird der Treffer aus (2) verwendet.
Es ist wichtig zu wissen, dass nginx einen Vergleich gegen dekodierte URLs macht. Zum Beispiel, wenn Sie etwas anpassen möchten, “/images/%20/test”, dann müssen Sie “/images/ /test” verwenden, um die Location zu bestimmen.
Beispiel:
location = / {
# Zutreffend nur für /
[ Konfiguration A ]
}
location / {
# Trifft auf die Anfrage zu, da die Anfragen regelmäßig mit / beginnen,
# die reguläre Ausdrücke werden zuerst geprüft.
[ Konfiguration B ]
}
location ^~ /images/ {
# Trifft jede Anfrage beginnend mit /images/ und stoppt die Suche,
# reguläre Ausdrücke werden nicht geprüft.
[ Konfiguration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# Trifft auf jede Anfrage endend mit gif, jpg, oder jpeg zu. Dennoch, werden
# Anfragen an das /images/ Verzeichnis durch die
# Konfiguration C verarbeitet.
[ Konfiguration D ]
}
Beispiel für Anfragen:
- / -> configuration A
- /documents/document.html -> configuration B
- /images/1.gif -> configuration C
- /documents/1.jpg -> configuration D
Beachten Sie, dass Sie diese 4 Konfigurationen in beliebiger Reihenfolge definieren können und die Ergebnisse unverändert bleiben würden. Während verschachtelte Verzeichnisse durch die Konfigurationsdatei erlaubt sind, wird von ihrer Verwendung abgeraten, da es zu unerwarteten Ergebnissen führen kann.
Das Präfix “@” legt eine “named”-Location fest. Solche Locations werden nicht während der normalen Verarbeitung der Anfragen verwendet, sie sind nur für die Intern umgeleiteten Anfragen (siehe error_page, try_files) zuständig.