return ·
rewrite ·
try_files ·
Regex ·
if ·
Variablen
Diese Direktiven ermöglichen die Umleitung von URLs, das Umschreiben von Pfaden, die Implementierung von Clean URLs und die Fehlerbehandlung – essenziell für SEO, Migrationen und moderne Webanwendungen.
return ist die einfachste und effizienteste Methode für Weiterleitungen. Sie können den HTTP-Statuscode und das Ziel angeben – ohne dass weitere Verarbeitung stattfindet.
| Code | Bedeutung |
|---|---|
| 301 | Permanent (dauerhafte Weiterleitung – SEO empfohlen) |
| 302 | Temporär (vorübergehende Weiterleitung) |
| 303 | See Other (z.B. nach POST) |
| 307 | Temporäre Weiterleitung (Methode bleibt erhalten) |
| 308 | Permanente Weiterleitung (Methode bleibt erhalten) |
return ist schneller als rewrite, da die Verarbeitung sofort beendet wird. Verwenden Sie return für einfache Weiterleitungen, rewrite für komplexe URL-Manipulationen.
rewrite ändert die URI intern oder führt eine Weiterleitung durch. Mit regulären Ausdrücken können Sie komplexe URL-Strukturen umschreiben.
| Flag | Bedeutung |
|---|---|
| last | Beendet die Verarbeitung im aktuellen location-Block |
| break | Beendet die Verarbeitung komplett (keine weiteren rewrite-Regeln) |
| permanent | Externe Weiterleitung mit 301 (permanent) |
| redirect | Externe Weiterleitung mit 302 (temporär) |
| last vs break | last sucht nach neuem location, break stoppt sofort |
last für interne Umschreibungen, die zu einem anderen location-Block passen sollen. break stoppt die Verarbeitung sofort – nützlich für Optimierungen.
try_files prüft, ob eine Datei oder ein Verzeichnis existiert, und gibt bei Erfolg diese zurück. Bei Misserfolg wird der Fallback (z.B. index.html oder eine Error-Seite) ausgeliefert.
try_files ist die empfohlene Methode für SPAs, da sie sicherstellt, dass alle Routen auf index.html fallen und das Frontend-Routing übernimmt.
Reguläre Ausdrücke in NGINX werden von der PCRE-Bibliothek verarbeitet. Sie ermöglichen flexible Mustererkennung für rewrite und location.
| Muster | Bedeutung |
|---|---|
| ^ | Anfang der URI |
| $ | Ende der URI |
| . | Beliebiges Zeichen (außer Newline) |
| .* | Beliebige Zeichen (0 oder mehr) |
| .+ | Beliebige Zeichen (1 oder mehr) |
| [0-9] | Ziffer 0-9 |
| [a-z] | Kleinbuchstaben |
| \d | Ziffer (äquivalent zu [0-9]) |
| \w | Wortzeichen (a-zA-Z0-9_) |
| () | Capture-Gruppe (in $1, $2, ... verfügbar) |
| | | ODER-Verknüpfung |
regex101.com, bevor Sie sie in die NGINX-Konfiguration einfügen. Spezielle Zeichen wie ? und + müssen in manchen Kontexten escaped werden.
if ermöglicht bedingte Ausführungen in der NGINX-Konfiguration. Achtung: if sollte sparsam verwendet werden, da es zu unerwartetem Verhalten führen kann (insbesondere in location-Blöcken).
| Bedingung | Beschreibung |
|---|---|
| $request_method = POST | Prüft die HTTP-Methode |
| $http_user_agent ~* "bot" | Prüft den User-Agent (case-insensitive) |
| $args ~ "debug=1" | Prüft Query-Parameter |
| -f $request_filename | Prüft, ob die Datei existiert |
| !-f $request_filename | Prüft, ob die Datei nicht existiert |
| -d $request_filename | Prüft, ob das Verzeichnis existiert |
if in location-Blöcken kann zu unerwartetem Verhalten führen (siehe "if is evil" in der NGINX-Dokumentation). Verwenden Sie wenn möglich try_files, return oder rewrite.
Variablen in NGINX enthalten dynamische Werte aus der Anfrage – wie URI, Host, IP oder Query-Parameter. Sie werden in return, rewrite und proxy_pass verwendet.
| Variable | Beschreibung |
|---|---|
| $uri | Aktuelle URI (normalisiert, ohne Query-String) |
| $request_uri | Ursprüngliche URI (mit Query-String) |
| $args | Query-String (Parameter) |
| $host | Hostname aus dem Host-Header |
| $http_host | Host-Header (wie $host) |
| $remote_addr | Client-IP-Adresse |
| $remote_port | Client-Port |
| $scheme | http oder https |
| $request_method | HTTP-Methode (GET, POST, etc.) |
| $http_user_agent | User-Agent-Header |
| $http_referer | Referer-Header |
| $server_name | Servername aus der Konfiguration |
| $document_root | Root-Verzeichnis |
| $request_filename | Vollständiger Pfad zur Datei |
$ können in den meisten Direktiven verwendet werden. $request_uri enthält den kompletten Pfad inklusive Query-String, während $uri normalisiert und ohne Query-String ist.
return
rewrite
try_files
Regex
if
$vars
return 301 /neu ·
rewrite ^/old/(.*)$ /new/$1 permanent ·
try_files $uri $uri/ /index.html