nginx URL Umleitung bei neuer Domain

  • Hallo zusammen,

    ich habe kürzlich ein Projekt in eine neue Website migriert, dabei hat sich die Domain samt URL Struktur geändert.

    Jetzt möchte ich gerne, dass alle alten Links weiterhin wie gewohnt funktionieren, und auf die neue Seite (permanent) weiterleiten. Anbei zwei Beispiele:

    https://www.altedomain.com/forum/12-einforum/
    https://www.neuedomain.de/forum/board/12-einforum/

    https://www.altedomain.com/thema/8461-einthema/
    https://www.neuedomain.de/forum/thread/8461-einthema/

    Da ich leider noch sehr unerfahren mit den nginx Direktiven bin, habe ich keine Idee, wie ich die Umleitung am sinnvollsten aufbaue. Kann jemand helfen?

    Beste Grüße,
    Daniel

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

    • Offizieller Beitrag

    Hallo,

    eine einfache Domain-Umleitung ist am sinnvollsten mit einem getrennten Server-Block und return 301 bewerkstelligt (z.B. www. hinzufügen):


    Bei dir ändert sich aber noch die Ordner-Struktur, damit kommst du um rewrite nicht herum:

    Code
    rewrite ^/impressum.shtml /impressum.php permanent; # Reguläre Ausdrücke wie bekannt
  • danke fürs schnelle Feedback. ANhand deines Beispiels habe ich zunächst die Weiterleitung für Themen gebaut. Das sieht wie folgt aus:


    Code
    server {
       server_name altedomain.com www.altedomain.com;
       rewrite ^/thema/^(.*) /forum/thread/$1 permanent;
       return 301 $scheme://www.neuedomain.de$request_uri;    
    }


    Leider bringt das nicht den gewünschten Effekt. (Themen zeigen auf der alten Seite nun einen 404) - was genau passt in meinem Beispiel nicht?

    Außerdem habe ich das hier probiert:


    Code
    if ( $request_filename ~ thema/.+ ) {
    rewrite ^(.*) https://www.neuedomain.de/forum/thread/$1 permanent;
    }

    Das hat zwar wie gewünscht zur neuen Seite weitergeleitet, aber zur URL /forum/thread/thema/... was auf der neuen Seite zu einen 404 führte...

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

    • Offizieller Beitrag

    Hallo,

    wenn ich gerade nicht irre, dann liegt es daran, dass permanent dazu führt, dass die Verarbeitung der rewrite-Regeln abgebrochen wird und das return dadurch nicht mehr ausgeführt wird. Du kannst das Problem auf zwei Arten lösen:

    • Verwende ausschließlich rewrite für alles und return für die neue Domain, um beispielsweise auf HTTPS umzuleiten
    • Verwende return, um auf die neue Domain umzuleiten und korrigiere bei dieser die Links noch einmal mit rewrite

    Das zweite hat zur Folge, dass potentiell zwei Redirects in Folge ausgeführt werden. Ich empfehle ersteres.

    • Offizieller Beitrag
    Code
    location ~ /forum/(.*) {
            if ($query_string) {
                    return 301 https://community.woltlab.com/$1?$query_string;
            }
    
            return 301 https://community.woltlab.com/$1;
    }

    Um auf deinen 2. Regex einzugehen, du matched den gesamten Pfad und wunderst dich, dass da thema wieder auftaucht? *wink-mit-dem-zaunpfahl* ;)

  • Verwende ausschließlich rewrite für alles und return für die neue Domain, um beispielsweise auf HTTPS umzuleiten

    die Umleitung auf https macht der Server bereits an anderer Stelle da kümmer ich mich nicht drum. Kannst du mir vielleicht ein Beispiel schicken wie das genau aussehen würde, wenn ich das ausschließlich mit rewrite lösen würde?

    Folgenden Code habe ich bereits versucht, der aber immer das ungewünschte "/thema/" mitnimmt

    Code
    if ( $request_filename ~ thema/.+ ) {
    rewrite ^(.*) https://www.neuedomainde/forum/thread/$1 permanent;
    }

    Aber vielleicht meinst du das ja nochmal etwas anders.

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

  • Code
    location ~ /forum/(.*) {
            if ($query_string) {
                    return 301 https://community.woltlab.com/$1?$query_string;
            }
            return 301 https://community.woltlab.com/$1;
    }

    Um auf deinen 2. Regex einzugehen, du matched den gesamten Pfad und wunderst dich, dass da thema wieder auftaucht? *wink-mit-dem-zaunpfahl* ;)

    sorry ich blicks nicht. kannst du das vielleicht mit meinen Beispieldaten darstellen? Der Code von dir würde ja sicher nur /"forum/" auf https://community.woltlab.com/forum/ weiterleiten - dass sich die Struktur aber gänzlich geändert hat, wird hier nicht berücksichtigt?

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

  • Nachtrag:

    so scheint es zu passen:

    Code
    location ~ /thema/(.*) {
            if ($query_string) {
                    return 301 https://www.neuedomain.de/forum/thread/$1?$query_string;
            }
            return 301 https://www.neuedomain.de/forum/thread/$1;
    }

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

    • Offizieller Beitrag

    Der Code von dir würde ja sicher nur /"forum/" auf community.woltlab.com/forum/ weiterleiten - dass sich die Struktur aber gänzlich geändert hat, wird hier nicht berücksichtigt?

    Nachträgliche Erklärung: Nein, würde es nicht. Dein Fehler lag am rewrite der mit (.*) gearbeitet hat, dieser Ausdruck matched aber immer den gesamten, unveränderten (!) Pfad. Bei meinem Beispiel wird der nur auf den Teil nach /forum/ gematched, dadurch fehlt die Verzeichnisangabe im Match. Schau dir den Code am besten einfach nochmal an, das ist nun wirklich die trivialste Art von RegEx :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!