Voorkom een redirect loop in je WordPress website

Bij het online zetten van een nieuwe website, zien we dit nog te vaak gebeuren: een redirect loop die er voor zorgt dat je WordPress website niet bereikbaar is.

In dit artikel:

  • De oorzaak: load balancer
  • Redirect loop
  • De oplossing in PHP

Load balancer

Hosting provider gebruiken steeds vaker een load balancer. Dit is een soort tussenstation die het verkeer opvangt en verdeelt naar hun servers.

De load balancer op zijn beurt maakt verbinding met de webserver waarop jouw (WordPress) website draait. Het antwoord dat de webserver teruggeeft, geeft de load balancer door aan de gebruiker, waardoor hij/zij zo de website te zien krijgt.

De verbinding tussen de gebruiker en de load balancer is tegenwoordig altijd beveiligd met HTTPS. Goede zaak natuurlijk, maar de verbinding tussen de load balancer en de webserver is dat nog lang niet altijd. Op zich kan dat geen kwaad, want dat is intern verkeer.

Het probleem zit hem er echter in dat de website hierdoor een niet-beveiligde verbinding ziet en dus een redirect geeft naar de beveiligde versie HTTPS van de website.

Redirect loop

Dit creëert een redirect loop: de gebruiker zit al op HTTPS en krijgt een redirect naar dezelfde HTTPS die op zijn beurt terug een redirect naar HTTPS geeft, enzovoort.

Het plaatje laat dit visueel zien (hopelijk is het duidelijk genoeg 😉).

De oplossing

Om dit te op te lossen, moeten we aan de (WordPress) website vertellen dat we eigenlijk al op HTTPS zitten zodat er geen redirect meer komt. Dit kan door te kijken naar het “forwarded protocol” wat meegegeven wordt vanaf de load balancer. Daaraan kunnen we zien welke verbinding de gebruiker oorspronkelijk had en zo de redirect voorkomen.

Heb jij dit probleem ook?

Gebruik dan de volgende regel aan het begin van je applicatie. In WordPress voeg je dit best toe in het “wp-config.php” bestand dat je in de root van de website vindt.

if(strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS']='on';
}

Wat deze code doet, is eigenlijk heel eenvoudig. Hij kijkt naar het protocol van de oorspronkelijke verbinding. Dit is beschikbaar als het zogenaamde “forwarded protocol”. Als dit protocol gelijk is aan “HTTPS” dan past hij de waarde aan die gezet was op basis van de eigenlijke verbinding naar de website. Hierdoor wordt verderop in de code gezien dat het protocol al HTTPS is en volgt er geen redirect.

Een probleem met jouw (WordPress) website? Wij helpen je graag!

Advies nodig over jouw website of online marketing?