Redirects i WordPress med regulære udtryk

Hvis du nogensinde har prøvet at flytte indhold fra et site til et andet eller ændre på URL-strukturen på dit site, så ved du, at døde links er irriterende. Her får du et tip til at komme det til livs i WordPress.

TEKNISK TIP. Regulære udtryk. Det lyder virkelig kedeligt, hva’? Måske, men det er ret smart at kunne, hvis du flytter indhold mellem sites eller laver om på din URL-struktur, fx ved at tilføje, fjerne eller ændre ting som kategori.

Fordi “sharing is caring” får du her lige et lille trick til, hvordan du kan sende trafikken det rigtige sted hen.

Jeg arbejder for det meste i WordPress, når jeg udgiver, og jeg bruger det plugin, der hedder Redirection til at styre mine redirects. Det bliver udviklet af en udvikler, der arbejder hos Automattic, der er det firma, der udvikler og udgiver WordPress.

Redirection er smart af flere årsager – blandt andet fordi det kan overvåge ændringer i dine “slugs” i WordPress, så du undgår døde links. Et “slug” er den del af URL’en, der ofte indeholder din artikels overskrift, fx /nyheder/her-er-overskriften-paa-din-artikel.

Eksempel på et regulært udtryk

Noget andet smart ved Redirection er, at det understøtter regulære udtryk (“regular expressions”). Kort fortalt (og meget overfladisk forklaret) går det ud på, at du skriver noget tilsyneladende kryptisk, som definerer den tekst/information, du leder efter – i dette tilfælde i URL’en. Hos Redirection kan du læse mere om brugen af regulære udtryk.

Fx havde jeg et test-site kørende for en kunde ifm. med implementering af paywall. Test-sitet bestod af en kopi af hele kundens site, og derfor vil jeg gerne sende eventuelt trafik til det test-site det rigtige sted hen, nu hvor testen er overstået og paywall’en er implementeret.

Derfor laver jeg et redirect med et regulært udtryk på mit website:

  • ^/beta/kundenavn/(.*)

Og sender trafikken til:

  • https://kundenavn.dk/$1

Forvirret? Forklaringen kommer her:

Det, der sker her er, at Redirection fanger al trafik, der lander på URL’er, der indholder mitwebsite.dk/beta/kundenavn/ efterfulgt af whatever. Det er det “.*” indikerer. Man kan også målrette efter specifikke typer tegn (fx bogstaver og tal) og et givent antal tegn (det er ofte regulære udtryk, der bruges, når en formular tjekker, at din e-mail er udfyldt i et gyldigt format, at der kun er tal i dit telefonnummer etc.)

Når man sætter “.*” i parentes, så gemmer Redirection den del af URL’en, den fanger. Den kan man så indsætte i den URL, brugeren sendes videre til, ved at skrive “$1”. Fanger man flere dele af en URL, skal de så indsættes med henholdsvis “$2”, “$3” og så videre.

Lad os tage et eksempel:

  1. Trafik lander på mitwebsite.dk/beta/kundenavn/her-er-en-artikel
  2. Redirection ser dette, matcher det med det regulære udtryk og gemmer “her-er-en-artikel”
  3. Redirection sender nu brugeren videre til kundenavn.dk/her-er-en-artikel

Det er virkelig smart, for så behøver vi ikke lave redirects på alle URL’er – men det kræver selvfølgelig, at URL’erne følger en struktur eller et skema, vi kan omsætte til et regulært udtryk. URL’er som hejhejhej.dk/?p=1234 er meget svære at arbejde med.

Det kræver selvsagt også, at jeg bruger samme URL-struktur på test-sitet som på kundens rigtige website.

Så hvis du flytter indhold fra et website til et andet (og bevarer samme URL-struktur), laver du følgende redirect på dit gamle site:

  • ^/(.*)
  • https://nytwebsite.dk/$1

Og hvis du ændrer URL-struktur, så du fx ikke længere har kategorinavnet i URL’en, ville du skrive noget i denne retning for en fiktiv “nyheder”-kategori:

  • ^/nyheder/(.*)
  • https://website.dk/$1

Vupti. Så slipper du for døde links og for at skulle ændre i en masse links. Værsgo’!

PS: Den vågne læser har muligvis bemærket, at jeg har et ^-tegn i starten af mine regulære udtryk i denne artikel.

Det skyldes, at jeg vil sikre, at Redirection kun matcher dette mod starten af URL’en. Det vil sige, at en URL som mitwebsite.dk/gammelt-website/beta/kundenavn/blah ikke bliver omfattet af det redirect. Dét er smart 😉

Happy redirecting 🎉

(Denne artikel blev oprindelig udgivet på LinkedIn)