WordPress und Nginx: Alte Permalinks umleiten

Wir haben in der Vergangenheit unsere Permalinkstruktur geändert, von /YYYY/MM/dd/postname auf /postname. Dabei funktionieren alte Verlinkungen nicht mehr, bei uns sind das beispielsweise viele Links aus dem Ubuntuusers-Wiki.

Warum alte Permalinks ein Problem sind

Neben den Suchmaschinen, die die Inhalte nicht mehr finden und dadurch die SEO-Werte verschlechtern, sind es vor allem die Nutzer, die darunter leiden. Ein Beispiel:

Der Artikel im ubuntuusers-Wiki zu Pipewire hat unsere Anleitung verlinkt (ganz unten). Wenn man sich nun den Link genau anschaut, stellt man fest, dass er die alte Permalinkstruktur nutzt:

https://linuxnews.de/2021/05/debian-pulseaudio-durch-pipewire-ersetzen/

Diese Struktur ist alt, der neue Link lautet: https://linuxnews.de/debian-pulseaudio-durch-pipewire-ersetzen/.

Das muss man nun irgendwie ersetzen. Natürlich könnte man in WordPress irgendein Redirect Plugin installieren – da ist mir die Unfallgefahr aber zu hoch. Zudem hasse ich Plugin’s und liebe Bordmittel. Jeden einzelnen Seitenbetreiber, der jemals auf uns verlinkt hat anzuschreiben, ist selbstredend auch keine Alternative.

Helft mir NGINX, ihr seid meine letzte Hoffnung!

Nginx ist wahnsinnig leistungsfähig und kann auch Links umschreiben. Gesagt, getestet und getan:

rewrite "^/\d{4}/\d{2}/\d{2}/(.+)$" /$1 permanent; #YYYY/MM/DD/post-name
rewrite "^/\d{4}/\d{2}/(.+)$" /$1 permanent;       #YYYY/MM/post-name

Funktioniert! Aus /2021/05/debian-pulseaudio-durch[...] wird /debian-pulseaudio-durch[...]. Ziel erreicht, Artikel am Ende – leider ist es nicht so einfach wie gedacht.

WordPress Eigenheiten

Das war es noch nicht. Die rewrites wurden eingebaut und funktionierten auch, einige Tage später schrieb mir Ferdinand, dass unsere Archive nicht mehr funktionieren. Das sind die Links, die aus dem Kästchen “Kategorie oder Monat gefällig?” in der Sidebar kommen. Es ging immer nur die erste Seite, Seite 2 konnte man vergessen, die wurde auf Seite 1 weitergeleitet. So sieht das aus:
https://linuxnews.de/category/debian/ (Grund-URL)
https://linuxnews.de/category/debian/page/2/ (URL zu Seite 2)

Gleiches galt auch für die Archive nach Monaten:
https://linuxnews.de/2024/10/ (Grund-URL)
https://linuxnews.de/2024/10/page/2/ (URL zu Seite 2)

Das ist natürlich sehr ärgerlich. Also zurück in die NGINX-RegEx-Hölle und weiter dran schrauben. Die Archivseiten folgen alle immer dem gleichen Muster mit /page/, welches wir uns hier zunutze machen können, indem wir eine Ausnahme dafür einbauen:

rewrite "^/\d{4}/\d{2}/\d{2}/((?!page).+)$" /$1 permanent; #YYYY/MM/DD/post-name
rewrite "^/\d{4}/\d{2}/((?!page).+)$" /$1 permanent;       #YYYY/MM/post-name

Nun läuft alles und man kann die alten Permalinks SEO-freundlich umleiten.

Ist dir eine Katze über die Tastatur gelaufen?

Nein, ich habe nur zwei Hunde, aber Spaß beiseite. Für alle, die diese rewrites verstehen wollen die Erklärung:

  • ^: Beginnt die Prüfung ab dem Start der URL
  • \d{4}: Steht für genau vier Ziffern (z. B. Jahr 2025)
  • /\d{2}: Steht für zwei Ziffern (z. B. Monat 01)
  • /\d{2}: Noch einmal zwei Ziffern (z. B. Tag 04)
  • /((?!page).+): Der nächste Teil der URL (alles nach dem Datum), solange es nicht “page” enthält
    • (?!page): Negativer Lookahead – stellt sicher, dass die Zeichenfolge “page” im folgenden Teil nicht enthalten ist
    • .+: Erfasst alle weiteren Zeichen
  • /$1: Leitet alles, was nach dem Datum kommt, direkt an /post-name weiter
  • permanent: Gibt einen HTTP-301-Redirect zurück, was gut für SEO ist, da Suchmaschinen die neue URL dauerhaft verwenden
Wie RegEx wirklich funktioniert (Katze nicht Teil des Lieferumfangs dieses Artikels)

Teilt den Beitrag, falls ihr mögt

8 Kommentare

  1. Katzen bevorzugen aber eine andere Tastenbelegung, um besser und schneller an die Sonderzeichen wie {, ] etc. dranzukommen ;-).
    Untersuchungen bzgl. der Qualität und Schnelligkeit bei der Entwicklung des Codes im Vergleich von Freigängern zu reinen Bürokatzen laufen noch …

    1
  2. SUPER !!!

    Auch ich liebe RegEx.
    Habe vor vielen Jahren damit angefangen um Wettkampf Ergebnislisten im csv Format in eine statische Webseite zu integrieren. Damals gab es noch kein WordPress und die Daten kamen noch auf 3.5 Zoll Disketten.

    Auch die Transformation des alten siduction Handbuches von html zu markdown gelang vor fast fünf Jahren mit einem perl Skript, das nur so vor RegEx strotzte. Dabei war nicht der html Code die Herausforderung, sondern die vielen Fehler in den Tags, die sich über die Zeit eingeschlichen haben und die von den Browsern toleriert wurden.

    2
  3. Ahaha, ich liebs! Einfach schon wegen dem Humor darin und dem Meme!

    Ehrlich, es ist wirklich so. Lass die Katze drüber laufen, wenn’s nicht klappt, nochmal. Irgendwann kommt ne funktionierende Regel x’D

    Und finde es schön dass du RegEX noch mal kurz angerissen und etwas erläutert hast mit den einzelnen Variablen. Das hilft auch alten Hasen in meinen Augen, da es viele Wege gibt. 🙂

    9
    1. Bei RegEx kenne ich zur zwei Arten von Menschen: Liebhaber oder Hasser. Früher hab ich es auch gehasst, aber mittlerweile spart es mir zu viel Zeit, als dass ich es weiter hassen könnte.

      Ich sollte den Artikel vielleicht noch ergänzen, dass die Katze optional ist und auch ein Hund funktioniert 😂

      4

Kommentar hinterlassen