.htaccess 301 redirect dynamische pagina met RewriteRule


Reageren
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

Vond je dit artikel nuttig/leuk/interessant? DEEL het dan met je vrienden via onderstaande social buttons!



 Abonneer je op de RSS-feed of blijf via e-mail op de hoogte van nieuwe artikelen!


Gepost op 23-12-2007 17:50 in de categorie seo door Annelies

9 comments - Reageren?


  • gravatar  

    annelies

    04-01-2008, 17:24

    Eens even proberen of leestekens nu ook werken, zoals het woord foto's of het woord bahama's

  • gravatar  

    Wim Wisselink

    04-01-2008, 20:54

    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

  • gravatar  

    Annelies

    07-01-2008, 14:26

    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 happy

    Groetjes Annelies

  • gravatar  

    Arne

    08-11-2011, 14:40

    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!

  • gravatar  

    Arne

    08-11-2011, 16:38

    Ik gebruik nu:

    RewriteCond %{THE_REQUEST} cat=(3) HTTP/
    RewriteRule . http://www.voorbeeldsite.nl/keyword.html? [R=301,L]

    en het lijkt te werken...

  • gravatar  

    Annelies

    08-11-2011, 16:50

    Wow, even wachten en alles lost zich vanzelf op wink-smile. Als het lijkt te werken en het blijkt achteraf echt zo te zijn, dan lijkt het me prima, toch Arne? wink-smile. Vergeet ook niet te kijken naar de links die ik heb genoemd onder aan het artikel, daar staat nog veel meer info happy.

  • gravatar  

    Geurtjan

    07-12-2011, 12:37

    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!

  • gravatar  

    Arne Dekmatras

    07-12-2011, 13:13

    Geurtjan, probeer dit eens:

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !.
    RewriteRule ^(.+[^/])$ /$1/ [R,L]

  • gravatar  

    Geurt Jan

    07-12-2011, 15:17

    Bedankt allemaal,

    het werkt!


Voeg commentaar toe

  1. Toegestane code:om een link in te voegen deze code gebruiken [url=http://...]urltekst[/url]

    Lees voordat je post ook mijn huisregels door
  2. Ik wil graag een bericht ontvangen als iemand anders reageert