.htaccess redirect

Wat zijn redirects?

Bij grote websiteprojecten spelen domeinomleidingen (redirects) een belangrijke rol. De mogelijkheid om het verkeer van een webpagina naar een andere om te leiden, helpt websitebeheerders erbij om bezoekersstromen en herstructureringen op de website door te voeren. Ook kun je dezelfde inhoud via omleidingen onder verschillende domeinen beschikbaar maken zonder dat deze als duplicate content wordt gezien. Bovendien is domeinomleiding een effectief instrument voor indexeringsmanagement bij zoekmachineoptimalisatie. Voor het beheer van een website staan daarbij verschillende opties ter beschikking om een domein of subdomein om te leiden naar een ander deel van de eigen webpagina of naar een externe website, bijvoorbeeld met een rewrite engine. De meest gangbare omleidingen lopen via .htaccess, PHP-Script, HTML-Meta-Tag en JavaScript.


Domeinomleiding voor websitebeheer

Omleidingen zijn in principe bedoeld om servers te laten weten dat de inhoud van een website van de ene naar de andere pagina is verhuisd. Dit is vooral belangrijk als er een link is die verwijst naar het oorspronkelijke webadres, als er een bladwijzer op de computer van de gebruiker is opgeslagen of als de pagina al goed vindbaar is. In dat geval geeft de omleiding aan de browser of webcrawler door dat de gezochte inhoud is verplaatst en geeft tevens het nieuwe adres door. Anders zouden bezoekers alleen een 404-pagina te zien krijgen. Dit wil je natuurlijk vooral bij commerciële websites voorkomen. Vooral bij webwinkels verandert het assortiment voortdurend en daarom zijn er veel individuele pagina’s. Als een artikel niet langer beschikbaar is, worden potentiële klanten doorgestuurd naar een pagina met vergelijkbare producten. Zo kunnen bezoekersstromen efficiënt worden omgeleid en wordt het aantal afhakers gereduceerd tot een minimum. Met een domeinomleiding kan dezelfde inhoud bovendien onder verschillende webadressen toegankelijk worden gemaakt. Alle alternatieve adressen worden daarbij gewoon omgeleid naar het oorspronkelijke domein.


Soorten domeinomleidingen

In principe wordt er onderscheid gemaakt tussen omleidingen door de server en door de client. Bij omleidingen door de server wordt er een overeenkomende http-statuscode aan de user agent (browser of webcrawler) doorgegeven, maar omleidingen door de client hebben een dergelijke bevestiging niet. Deze omleidingen worden daarom niet ondersteund door alle user agents. Soms blijven bezoekers zo op de oorspronkelijke pagina en worden niet doorgestuurd naar een andere. De omleiding door de server heeft daarom meestal de voorkeur. Omleidingen door de client zijn alleen handig als door technische beperkingen een omleiding door de server niet kan worden opgezet.


Omleiding door de server

Meestal loopt deze omleiding via het configuratiebestand .htaccess of een PHP-script. Het voordeel van beide methodes is dat je individueel kunt definiëren welke http-statuscode aan de user agent moet worden doorgegeven. Hierdoor kunnen websitebeheerders een domeinomleiding als permanent of tijdelijk markeren. In dit kader zijn vooral de http-statuscodes 301 en 302 relevant:

  • 301 – Moved Permanently: De door de user agent opgevraagde bron is langdurig beschikbaar onder de omleiding die in de URL genoemd is. De oude URL is voortaan ongeldig.
  • 302 – Moved Temporarily: De door de user agent aangevraagde bron is voorlopig beschikbaar onder de omleiding die in de URL genoemd is. In tegenstelling tot de 301-code blijft de oorspronkelijke URL ondanks de omleiding geldig.

Als de http-statuscode niet expliciet wordt gedefinieerd, geeft een webserver bij een omleiding door de server standaard de statuscode 302. Dit is echter niet altijd gewenst. Daarom is het aan te raden om bij iedere omleiding de gewenste statuscode handmatig in te voeren. Hiermee voorkom je indexeringsfouten en het zogeheten URL-hijacking. In tegenstelling tot de 301-omleiding laat de statuscode 302 de webcrawler weten dat de oorspronkelijke URL geïndexeerd moet blijven. Op lange termijn concurreert het omleidingsadres met het omleidingsadres in de zoekmachine.


.htaccess redirect

.htaccess is een configuratiebestand voor de Apache-webserver waarmee de centrale configuratie op registerniveau kan worden gewijzigd. Met dit bestand kunnen websitebeheerders registerinstellingen voor een domein en de bijbehorende submappen uitvoeren. Een functie van het .htaccess-bestand is de domeinomleiding door de server van individuele, bij een webproject behorende adressen naar andere URL’s.

Als je een .htaccess-bestand aanmaakt in het hoofdregister met de volgende code, worden aanvragen aan het oorspronkelijke domein door de server omgeleid naar het domein ‘www.voorbeeld.nl’:

01 Redirect 301 / https://www.voorbeeld.nl/

De coderegel begint met ‘Redirect 301’ en legt daarmee de http-statuscode vast die de server moet doorgeven. Daarna volgt het pad naar de inhoud die moet worden omgeleid. In dit geval alles, zoals te zien aan de schuine streep. Tot slot volgt het volledige adres van de doel-URL waarnaartoe de user agent moet worden omgeleid: ‘https://www.voorbeeld.nl’.

Hiermee kunnen ook individuele data worden omgeleid. De volgende code laat een redirect zien van de ene webpagina naar de andere:

01 Redirect 301 /register/voorbeeld-document.html https://www.voorbeeld.nl/voorbeeld.html

Na de http-statuscode 301 wordt het pad van het bestand genoemd dat permanent moet worden doorgeleid (‘/register/voorbeeld-document.html’). Ook wordt het adres van het omleidingsdoel genoemd (‘https://www.voorbeeld.nl/voorbeeld.html’)

Op een Apache-server met een actieve mod_rewrite-module zou de permanente omleiding van een webpagina naar een andere URL er in dit geval zo uitzien:

01 RewriteEngine On
02 RewriteRule ^register/voorbeeld-document.html$ https://www.voorbeeld.nl/voorbeeld.html [L,R=301]

In coderegel 01 wordt de mod_rewrite-module van de Apache-webserver geactiveerd met het commando ‘RewriteEngine On’. Daarna volgt een ‘RewriteRule’ met het pad naar het om te leiden bestand en het doeladres. Het dakje en het dollarteken geven het begin en het einde van het pad aan, L is de laatste mod_rewrite-regel voor passende verzoeken. R=301 leidt het verzoek met http-statuscode 301 door.

Bij de configuratie van een domeinomleiding via .htaccess moet je erop letten dat verkeerde invoer in het configuratiebestand ernstige gevolgen kan hebben voor de website. Na het opslaan van het .htaccess-bestand treden alle veranderingen direct in werking, daarom moeten configuraties altijd grondig worden getest.


.htaccess redirect

PHP-omleiding

Een domeinomleiding hoeft niet per se op een configuratie in het .htaccess te volgen. In plaats daarvan kun je ook gebruikmaken van een commando in een PHP-script (bijvoorbeeld in index.php). De volgende code laat een permanente omleiding zien naar de fictieve URL ‘www.voorbeeld.nl’.

01 <?php
02 header("Status: 301 Moved Permanently");
03 header("Location: https://www.voorbeeld.nl");
04 exit;
05 ?>

Bij de omleiding via PHP-script wordt de bedoelde http-statuscode gedefinieerd door de ‘header’-functie in coderegel 02. In dit voorbeeld moet er een permanente 301-omleiding worden uitgevoerd. Omleidingen via een server worden standaard tijdelijk uitgevoerd. Daarom moet je een permanente omleiding expliciet afdwingen met statuscode 301. Het doeladres van de domeinomleiding wordt in coderegel 03 eveneens voorafgegaan door ‘header’. De omleiding in dit voorbeeld is naar het webadres ‘https://www.voorbeeld.nl’. De ‘exit’-functie in coderegel 04 beëindigt het script en verhindert dat verdere codes worden uitgevoerd. Om ervoor te zorgen dat de omleiding via PHP-script werkt, moet het codeblok aan het begin staan, voordat de server eventuele HTML-inhoud van het omleidingsadres bezorgt.


Omleidingen door de client

Als een domeinomleiding om technische redenen niet via de server kan lopen, kunnen websitebeheerders terugvallen op de client. Daarom staan de HTML-metatag ‘refresh’ en het bijbehorende Javascript ter beschikking. Het nadeel van omleidingen door de client is dat de server geen http-statuscode aan de browser of webcrawler doorgeeft. Deze wordt daarmee dus niet expliciet op de omleiding gewezen. Daarom worden omleidingen door clients ook niet door alle user agents ondersteund. Daarmee loop je het risico dat sommige paginabezoekers niet worden omgeleid.

Omleidingen door de client hebben ook een negatief effect op de indexering door zoekmachines. Ook vindt er bij deze omleiding geen expliciete uitsluiting van de indexering plaats door de http-statuscode 301. Daardoor kan het zijn dat het omleidingsdomein moet concurreren met het doeldomein in de zoekresultaten. In tegenstelling tot omleidingen door de server, die voor de gebruiker buiten de adresverandering nagenoeg onzichtbaar blijven, gaan omleidingen door de client altijd gepaard met vertragingen. Dit kan de gebruiker wel degelijk opvallen.


.htaccess redirect

Omleiding via HTML-meta-refresh

De HTML-metaomleiding wordt omgezet door de ‘http-equiv’-metatags. Daarvoor hoef je alleen maar een eenvoudig HTML-bestand met de juiste tag in de header voor de omleiding aan te maken. Om de bezoeker op de omleiding te wijzen, moet je in het HTML-document een passende aanwijstekst invoeren. Korte teksten zoals ‘Even geduld a.u.b.’ worden vaak gebruikt. Een eenvoudige domeinomleiding via HTML-meta-refresh naar een fictief voorbeeldadres ziet er bijvoorbeeld zo uit:

01 <meta http-equiv="refresh" content="10; url=https://www.voorbeeld.nl/">

Door de metatag http-equiv="refresh" krijgt de client de opdracht het domein om te leiden. Hoe dit gaat, kan worden gedefinieerd met de content-functie. In het voorbeeld word je na 10 seconden doorgestuurd naar het doeldomein ‘https://www.voorbeeld.nl’.


.htaccess redirect

JavaScript-omleiding

JavaScript biedt een eenvoudige mogelijkheid voor omleidingen door de client. Maar, net als bij de metatag ‘refresh’, moet je JavaScript-omleidingen alleen bij uitzondering gebruiken, omdat de scripttaal uit veiligheidsoverwegingen niet door iedere webbrowser wordt ondersteund. JavaScript-omleidingen zorgen bovendien met actieve NoScript-addons voor problemen bij webcrawlers en gebruikers. Een klassieke domeinomleiding via JavaScript ziet er als volgt uit:

01 <script>
02 <!--
03 window.location.replace('https://www.voorbeeld.nl');
04 //-->
05 </script>

Vooral coderegel 03 is hier belangrijk. In deze code wordt het object ‘window.location’ gebruikt om naar de huidige website te verwijzen. Het commando ‘replace’ wijst op de browser die de gebruiker naar het tussen haakjes genoemde doeldomein ‘https://www.voorbeeld.nl’ moet omleiden.