Naar de hoofdinhoud
Alle collectiesPhoenixSEO
Redirect Regular Expressions (regex)
Redirect Regular Expressions (regex)

Na redirect is dit next level redirecten, met regex kan je regels aanmaken waarmee je meerdere redirect kan instellen.

Maartje Daems avatar
Geschreven door Maartje Daems
Meer dan 5 maanden geleden bijgewerkt

❗We geven support op de redirect module niet op specifieke regex instellingen.
Hieronder vind je meer informatie over regex, maar het is uiteindelijk jouw verantwoordelijkheid om een regex aan te maken die voor jou werkt.


Wat is regex?

Met reguliere expressie, ook wel regular expression of regex genoemd, gebruik je een groep tekens waarmee je een patroon in een stuk tekst zoekt.

Hou er rekening mee dat om een ​​regex in redirection te kunnen gebruiken, je ervoor moet zorgen dat je de 'regex'-optie hebt ingeschakeld.


Regex redirect folder

Een normale URL-redirect stel je in van a naar b. Er is maar één mogelijkheid voor deze redirect. Een regex-redirect kan overeenkomen met vele URL's.

Naast het matchen van veel URL's, kan een regex ook informatie uit de bron-URL halen en deze naar de doel-URL kopiëren.

Hier een paar voorbeelden om het duidelijker te maken.
Een redirect met de bron-URL /product-pagina zal alleen deze pagina doorsturen.
/product-pagina/specs en product-pagina/reviews zullen niet worden doorgestuurd.

Een omleiding met de bron-URL /product-pagina/.* komt overeen met verzoeken voor:

/product-pagina/specs

product-pagina/reviews

Enzovoorts.

Het belangrijkste deel van /mijn-url/.* is dus .* (punt-ster)​. Dit is het reguliere expressiegedeelte van de URL en betekend: "match /product-pagina/ gevolgd door een willekeurige reeks tekens".

Opbouw voor reguliere expressies

Dus reguliere expressies zoals .* lijken erg handig. Maar wat betekent het eigenlijk?

In dit geval de . betekent 'elk teken', en de * betekent een aantal van de vorige uitdrukking. Dat wil zeggen, een willekeurig aantal tekens.

Maar wacht, het wordt veel ingewikkelder!

Broninformatie uit de url halen

Een reguliere expressie kan niet alleen overeenkomen met veel URL's, maar kan ook informatie uit de bron-URL halen en deze naar de doel-URL kopiëren.

Waarom zou je dat willen doen? Laten we naar een voorbeeld kijken. Stel dat je een site hebt waarvan blog pagina's staan in de categorie /search-engine-optimization/ categorie, en je hebt deze allemaal naar een nieuwe categorie /seo/ verplaatst.

/search-engine-optimization/redirects/

/search-engine-optimization/meta-titel/​

En je wilt deze verplaatsen naar:

/seo/redirects/

/seo/meta-titel

Dat wil zeggen, je wilt /search-engine-optimization/ veranderen in /seo/, maar redirects en meta-titel wilt behouden.

Om dit te doen kun je een reguliere expressie maken zoals /search-engine-optimization/(.*)

Merk op dat de .* tussen haakjes staat. Dit vertelt Redirection om de gegevens te 'onthouden'. De doel-URL zou dan /seo/$1 zijn.

Hier wordt de $1 vervangen door de inhoud van de vastgelegde (.*). En dus:

/search-engine-optimization/redirect => /search-engine-optimization/(redirects) => /seo/$1 => /seo/redirects


Oneindige lussen voorkomen

Een veel voorkomend probleem bij reguliere expressies is een oneindige omleiding. Dat wil zeggen dat je een regex maakt die doorverwijst naar een URL die zelf wordt opgevangen door dezelfde regex. Dit wordt dan opnieuw omgeleid, en opnieuw, en opnieuw totdat de browser stopt met een ERR_TOO_MANY_REDIRECTS-bericht (of iets soortgelijks).

Stel dat we de categorie online marketing als subcategorie van marketing willen maken.

We krijgen dan deze omleiding.

/online-marketing/(.*) ⇒ /marketing/online-marketing/$1

Als je /online-marketing/social-media opent, wordt het doorgestuurd naar /marketing/online-marketing/social-media.

Maar wacht! De URL /marketing/online-marketing/social-media zelf komt overeen met de originele regex /online-marketing/(.*).

Als we het karaat ^-teken gebruiken, kunnen we de overeenkomst aanpassen aan het begin van de URL:

^/online-marketing/(.*)

Hier vertelt de ^ de reguliere expressie dat deze alleen van toepassing is wanneer deze overeenkomt aan het begin van de URL. Dit voorkomt dat het ergens anders in de URL overeenkomt en stopt de oneindige omleiding.


Reguliere expressies maken en testen

Als je meer wilt doen met regex zou ik je aanraden om hier meer te over te gaan lezen. Je kan er ontzettend veel mee. Hieronder een lijst met alle karakters die je kan gebruiken in je regex.

Meta karakter

Omschrijving

.

Punt komt overeen met elk afzonderlijk teken, behalve een regeleinde.

[ ]

Karakter klasse. Komt overeen met elk teken tussen de vierkante haken.

[^ ]

Negatieve karakterklasse. Komt overeen met elk teken dat niet tussen de vierkante haken staat

*

Komt overeen met 0 of meer herhalingen van het voorgaande symbool.

+

Komt overeen met 1 of meer herhalingen van het voorgaande symbool.

?

Maakt het voorgaande symbool optioneel.

{n,m}

Een beugel. Komt overeen met ten minste "n" maar niet meer dan "m" herhalingen van het voorgaande symbool.

(xyz)

Karakter groep. Komt overeen met de tekens xyz in die exacte volgorde.

|

Afwisseling. Komt overeen met de tekens vóór of de tekens na het symbool.

\

Uitsluiten vanhet volgende teken. Hiermee kun je reguliere expressie tekens matchen. [ ] ( ) { } * + ? ^ $ \ |

^

Komt overeen met het begin van de invoer.

$

Komt overeen met het einde van de invoer.

Om nu niet meteen van je redirects een puinhoop te maken kun je online je regex testen met reguliere expressie testers.

Hiermee kun je experimenteren met een patroon en het afstemmen op wat je wilt.

❗Redirect regex is geschreven in PHP. Als deze selecteert krijg je een foutmelding door de / in een url. Als je hem op Java8 zet kan je kijken of je regex werkt voor een hele lijst url’s.

Wil je echt heel diep in de reguliere expressies duiken, dan raad ik je aan hier te starten.


Regex voorbeelden

Hieronder een lijstje met voorbeelden van de meeste gebruikte regex die je kan gebruiken. Deze zijn vooral handig als je naar een nieuw domein overstapt, als je van een ander CMS overstapt naar Phoenix of als je de structuur van je site wilt aanpassen.

Redirect datum en naam permalink
/2020/01/02/post-name//post-name/

From

^/\d{4}/\d{2}/\d{2}/(.*)

To

/$1

Redirect datum, naam, and category permalink
/2020/01/02/category/post-name/post-name/

From

^/\d{4}/\d{2}/\d{2}/.*?/(.*)

To

/$1

Redirect alle URLs naar /blog/ behalve die al starten met /blog/
/old-post-url//blog/old-post-url/

From

^/(?!blog)(.*)

To

/blog/$1

Redirect elke pagine van oude site naar de nieuwe site (instellen op de oude site)
http://oldsite.com/your-thing/https://newsite.com/your-thing/

From

/(.*)

To

https://newsite.com/$1

Redirect .html paginas naar nieuwe site
http://oldsite.com/blog/post-name.htmlhttps://newsite.com/post-name/

From to

/blog/(.*?)\.html

To

https://newsite.com/$1/

Redirect .html paginas met hetzelfde domein
http://oldsite.com/blog/post-name.htmlhttps://newsite.com/post-name/

From

/blog/(.*?)\.html

To

/$1/

Verwijder .html uit de url van de pagina's
http://site.com/2019/01/02/something.htmlhttp://site.com/2019/01/02/something

From

^/(.*?)\.html$

To

/$1/

Redirect AMP pagina's
http://site.com/article/amp/http://site.com/article/

From

^/(.*?)/amp/$

To

/$1/

Was dit een antwoord op uw vraag?