.htaccess 301 redirect dynamische pagina met RewriteRule
Hoe herschrijf je de url’s van dynamische pagina’s op een beetje makkelijke manier? Die vraag stelde ik mijzelf afgelopen week, toen ik bezig was mijn website te updaten. Klaarblijkelijk met een .htaccess file.
Omdat ik veel geleerd heb afgelopen tijd over zoekmachine-optimalisatie,
en het nut van url’s herschrijven, wilde ik dat zelf ook uitproberen.
Het is namelijk zo dat als je url’s herschrijft, je de oude moet laten redirecten naar de nieuwe.
De kennis die ik heb opgedaan bij mijn speurtocht naar url rewriterules, ga ik nu met u delen!
Sinds ik bij Traffic4u werk leer ik veel over zoekmachine-optimalisatie.
En niet alleen daarover, maar ook over gebruiksvriendelijkheid. Naar aanleiding daarvan
heb ik afgelopen week mijn website geupdate. Ik ben begonnen met het veranderen van de layout.
Zo heb ik van veel tabellen DIV-tags gemaakt en H1 en H2 kopjes ingevoegd.
Omdat dit nog lang niet alles is, heb ik ook de meta-description aangepast.
Die is nu variabel per pagina. Het duurt blijkbaar even voor Google dit doorheeft, want nog niet alle pagina’s
hebben nu de juiste omschrijving als je erop zoekt. Maar dat zal binnen een maandje toch wel opgelost zijn hoop ik.
Terug naar het herschrijven van dynamische pagina’s. Dit gebeurt zoals eerder vermeld in een .htaccess bestand met behulp van de zogenaamde RewriteRules en 301 redirects.
Dit is zeer interessant, omdat er veel over geschreven wordt op het web, maar niet alles is even duidelijk.
Uiteindelijk heb ik, mede door de hulp van mijn collega Klaas en eerder al door
Michiel, alle stukjes en beetje bij elkaar kunnen leggen.
Nu is het tijd om mijn nieuwe kennis te delen met de rest van de wereld!
Ik behandel hier puur en alleen het redirecten van dynamische pagina’s naar statische pagina’s en het herschrijven van de oorspronkelijke dynamische url
naar de nieuwe statische url. Ik zal proberen het kort en bondig te laten zijn.
Ten eerste moet je zorgen dat je RewriteEngine On hebt staan in je .htaccess file. Als je in een bestaande configuratie werkt
staat deze meestal tussen <IfModule mod_rewrite.c> en </IfModule>. Als dit niet aanwezig is, zal het vervolg van wat ik uitleg ook niet werken.
Dus als het niet aanwezig is, zelf even toevoegen.
Verder is er de Options +FollowSymLinks die aan moet staan, die wordt voor RewriteEngine On geplaatst.
Als je dit hebt, ben je klaar om url’s te herschrijven en te redirecten.
Je begint met de redirects. Volgorde maakt in dit geval veel uit. Als je eerst de herschrijf regels doet, valt er namelijk niet veel te redirecten.
Je begint met het noemen van de voorwaarde waaraan de herschrijving moet voldoen.
RewriteCond %{THE_REQUEST} page=([^&]+)*\ HTTP/
Dit zegt dat als er in de url page=jouwpagina wordt opgevraagd hij de volgende regel moet uitvoeren en daarbij dat hij de http headers niet laat zien.
En dit is de volgende regel:
RewriteRule . http://www.jouwsite.nl/page/%1? [R=301,L]
Alles tussen de slashes kan aangepast worden naar wat je wilt. %1 betekent dat hij terug moet grijpen naar de variabele die genoemd wordt in de regel ervoor.
R=301 is een permanente redirect, waarmee je dus zegt dat je pagina voor altijd op een andere plaats staat. L betekent dat dit de enige regel voor deze redirect en dat andere regels niet gelden hierop.
Nu zijn er natuurlijk veel mensen die wat meer variabelen hebben staan in de url’s.
Daarvoor de volgende oplossing:
ReWriteCond %{THE_REQUEST} page=([^&]+)&id=([^&]+)*\ HTTP/
RewriteRule . http://www.jouwsite.nl/page/%1/id/%2? [R=301,L]
Waarin hij dit keer ook het id meeneemt. Ook dit valt natuurlijk naar wens aan te passen.
Daarna wil je dat intern de juiste pagina’s worden gepakt:
RewriteRule ^page/([^/]+)/id/([^/]+) index.php?page=$1&id=$2 [nc]
Waarbij je natuurlijk het id eraf kunt laten of andere dingen kunt toevoegen naar wens.
Als er iets niet direct werkt, probeer dan eerst de volgorde van de regels uit. Belangrijk is dat je stap voor stap werkt en niet te snel wilt gaan.
Kort gezegd, je moet er even mee stoeien, wat frustratie op kwijt raken, maar uiteindelijk levert het toch op dat je makkelijk onthoudbare url’s hebt
en dat je misschien nog wel beter vindbaar bent in Google.
Wat hierboven staat is nog steeds geen ideale url rewrite, maar voor mij is het slechts een probeersel. Natuurlijk wil je verwijzen naar pagina’s als:
www.jouwsite.nl/dit-is-een-interessant-artikel.html puur omdat je daarin veel keywords in kwijt kan. Dit in combinatie met een goede paginatitel en
meta description heet de keyword visibility triangle.
Link: Apache documentatie over mod rewrite
Link: Andre Scholten over veel gebruikte htaccess regels
Eens even proberen of leestekens nu ook werken, zoals het woord foto’s of het woord bahama’s
Goed, poging #4
Ik zie dat je ^page gebruikt maar dit is niet strict noodzakelijk. Ik gebruik /#id/titel_pagina_etc (ook sinds vandaag ). Anyway, ik had een vraag omtrent het url gebruik. Ik zie op verschillende sites dat ze de extensie .html gebruiken. ik zelf gebruik het namelijk niet en Ik zie dat jij het ook niet gebruikt. Maar in hoeverre is het belangrijk dat het erachter staat. Maakt het uit? Ik kon het namelijk nergens vinden.
Hier is de code voor .htaccess om /page/ weg te laten:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* – [L]
RewriteRule ^(.*) index.php?url=$1
Er wordt gekeken of het bestaat bestaat, zo niet dan verwijst hij naar index.php
zo ja, nahja je raad het al dan wordt deze gewoon geopend.
Wim
Hoi Wim,
Bedankt voor je input wat betreft het herschrijven van url’s! Wat betreft je vraag over het gebruik van .html: ik denk dat het niet perse nodig is om die extensie erachter te zetten. Het gaat Google en andere zoekmachines voornamelijk om de keywords, dus de naam van de pagina die VOOR de extensie staat.
Verder, het gebruik van page is inderdaad niet nodig, kan ook heel goed zonder. Maar voor mij is dat nu even niet het belangrijkst 🙂
Groetjes Annelies
Annelies, bedankt voor deze informatie! Ik kom er niet helemaal uit:
Hoe herschrijf ik bijvoorbeeld deze ene dynamische URL naar een statische (seo vriendelijke) URl? :
http://www.voorbeeldsite.nl/catalogus.html?=&cat=77
Alvast bedankt voor de hulp!
Ik gebruik nu:
RewriteCond %{THE_REQUEST} cat=(3) HTTP/
RewriteRule . http://www.voorbeeldsite.nl/keyword.html? [R=301,L]
en het lijkt te werken…
Wow, even wachten en alles lost zich vanzelf op ;-). Als het lijkt te werken en het blijkt achteraf echt zo te zijn, dan lijkt het me prima, toch Arne? ;-). Vergeet ook niet te kijken naar de links die ik heb genoemd onder aan het artikel, daar staat nog veel meer info :).
Hoi Annelies,
Bedankt voor je heldere uitleg.
Kun je mij misschien helpen bij hetvolgende:
Ik wil in een .htaccess bestand een rewrite rule maken die alle binnenkomende URL’s checked of ze op een slash eindigen. Zo ja, dan laat ze door, Zo nee, dan zet er een slash achter en redirect ze middels een 301 redirect.
Dit lijkt veel op wat jij beschrijft maar vooral de eerste check kom ik niet uit.
Alvast bedankt!
Geurtjan, probeer dit eens:
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !.
RewriteRule ^(.+[^/])$ /$1/ [R,L]
Bedankt allemaal,
het werkt!