NGINX, umleiten ganzes Verzeichnis?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Für deinen Beispielfall kannst du eine return-Direktive definieren.

An sich kannst du die direkt in der nginx.conf setzen. Eleganter wäre es meines Erachtens jedoch, eine eigene Konfigurationsdatei dafür anzulegen.

Finde zunächst die nginx.conf und schau, ob sie im http-Block mit einer include-Direktive bereits ein Verzeichnis für Konfigurationsdateien einbindet. Andernfalls kannst du auch ein eigenes Verzeichnis anlegen und dazu die entsprechende Direktive ergänzen.

Beispiel:

include /config/*.conf;

Alle Dateien mit der Endung .conf, die im Ordner config liegen, werden von dem Server berücksichtigt. Der config-Ordner muss natürlich noch angelegt werden.

Sofern es im Konfigurationsverzeichnis noch keine Konfigurationsdatei gibt, die Rewrites/Redirects auflistet, würde ich eine neue Datei erstellen und in dieser die Regeln formulieren, die du brauchst.

Beispiel (/config/redirects.conf):

server {
  location ~ ^/content/produkte/(.*) {
    return 301 /content/dienstleistungen/$1;
  }
}

Der location-Block im Beispiel formuliert einen regulären Ausdruck, welcher deinen URL-Pfad beschreibt, welcher umgeleitet werden soll.

Sollten dir reguläre Ausdrücke generell noch unbekannt sein, dann findest du beispielsweise mit diesem Artikel eine erste verständliche Einführung. Bezüglich der Syntax solltest du jedoch berücksichtigen, dass die je nach genutzter Expression Engine des Systems variieren kann. Bei Nginx werden die regulären Ausdrücke über die PCRE-Engine ausgewertet und zusätzlich gibt es noch Nginx-spezifische Abweichungen. So ist es beispielsweise nicht notwendig, den Slash mit einem vorangehenden Backslash zu maskieren. Als Kurzreferenz würde ich daher diesen Beitrag empfehlen.

Zurück zum obigen Beispiel: Hier werden alle Dateien aus dem produkte-Verzeichnis (z.B. https://www.yourpage.com/content/produkte/xyz.html) berücksichtigt. Die Tilde gibt an, dass Groß- und Kleinschreibung ignoriert werden sollen.

Wenn du tatsächlich nur .htm-Dateien umleiten möchtest, müsste der reguläre Ausdruck noch etwas angepasst werden:

^/content/produkte/(.*\.htm)$

Innerhalb des location-Blocks wird die return-Direktive angegeben, die den zurückzugebenen Statuscode sowie das neue Ziel definiert.

Die Backing Reference ($1) wird durch den umklammerten Fund des obigen regulären Ausdrucks (also zum Beispiel xyz.html) ersetzt.

Für den Fall, dass du noch weitere Umleitungen brauchst, kannst du noch weitere location-Blöcke innerhalb des server-Blocks ergänzen.

Solltest du Umleitungen formulieren wollen, die nur für eine gewisse Zeit gelten (z.B. einen Monat und danach möchtest du die Umleitung wieder entfernen), dann gib statt 301 den Statuscode 302 zurück.

Nach abgeschlossener Konfiguration muss die Änderung einmal an Nginx kommuniziert werden. Der bevorzugte Weg wäre ein Neuladen der Konfigurationsdateien.

Kommandozeile:

nginx -s reload

Alternativ kann man auch den Server neustarten, was allerdings mit einer Downtime der Webseite einhergeht.


Beni68 
Beitragsersteller
 14.09.2024, 01:42

Ganz herzlichen Dank.

Ja die conf Dateien habe ich schon auf meine virtuellen Server aufgesplittet und dann noch in sites-available und sites-enable.

Ich habe am Schluss noch $1 angehängt und das ging nicht. Ich war der Meinung $1 selbst sei die Dateivariable.

Danke für den Link "reguläre Ausdrücke" in Deutsch. Da mangelt es bei mir. Und im Englischen bin ich nicht sattelfest.

Danke, Du hast dich sehr bemüht, schön formatiert, gute Antwort.

Ich habe meine Verzeichnisstruktur geändert und nun muss ich Umleitungen machen.

Lg