.htaccess rewrite
Het volgende: ik heb een website.nl/pagina.php, nu wil ik dat pagina.php verwijst naar website.nl/pagina
Ik heb begrepen dat dit via een .htaccess moet doen, maar ik begrijp gewoon niet hoe het werkt. Veel tutorials opgezocht, maar ik word er niet echt wijs uit.
Volgens mij is het iets heel simpels zou iemand een voorbeeld kunnen posten?
RewriteRule ^pagina pagina.php
Regular Expressions
De code zal zoiets worden:
Even een uitleg:
Bij RewriteRule zet je eerst wat je wilt intypen, en dan welke pagina je wilt zien. De uitleg over wat je wilt intypen:
^ Geeft aan dat dit het begin is. Bij de RewriteRule hebben we aangegeven dat het begin de root is /
() Geeft een groep aan. Het gedeelte wat hierin staat dat matched wordt opgeslagen
. Dit teken matched alle tekens behalve spaties, tabs, enters
*? De * geeft aan dat we de . 1 of meer keer moeten matchen. De ? zorgt ervoor dat we proberen zo min mogelijk te matchen.
$ Geeft aan dat het gematchde gedeelte tot aan de eind van de string moet lopen. Dit betekend dus dat in (.*?) alles tussen / en het eind matched.
Nu pakken we de pagina die we willen inladen:
$1 Dit betekend de eerste match die we in een groep hebben geplaatst. In dit geval dus (.*?) in het vorige voorbeeld. Als we meerdere hebben kunnen we ze aanroepen als $1, $2, enz.
.php Dit is de extensie van de pagina die we inladen. In ons geval een .php pagina.
Laten we nu kijken wat deze code doet als we website.nl/contact intypen:
(.*?) matched contact, namelijk vanaf de RewriteBase tot aan het eind
contact wordt geplaatst op de plaats van $1 dus we laden nu eigenlijk contact.php in. Kortom: Het werkt!
Je zult dan moeten kunnen regexen. Deze tutorial legt dat goed uit: De code zal zoiets worden:
Even een uitleg:
Bij RewriteRule zet je eerst wat je wilt intypen, en dan welke pagina je wilt zien. De uitleg over wat je wilt intypen:
^ Geeft aan dat dit het begin is. Bij de RewriteRule hebben we aangegeven dat het begin de root is /
() Geeft een groep aan. Het gedeelte wat hierin staat dat matched wordt opgeslagen
. Dit teken matched alle tekens behalve spaties, tabs, enters
*? De * geeft aan dat we de . 1 of meer keer moeten matchen. De ? zorgt ervoor dat we proberen zo min mogelijk te matchen.
$ Geeft aan dat het gematchde gedeelte tot aan de eind van de string moet lopen. Dit betekend dus dat in (.*?) alles tussen / en het eind matched.
Nu pakken we de pagina die we willen inladen:
$1 Dit betekend de eerste match die we in een groep hebben geplaatst. In dit geval dus (.*?) in het vorige voorbeeld. Als we meerdere hebben kunnen we ze aanroepen als $1, $2, enz.
.php Dit is de extensie van de pagina die we inladen. In ons geval een .php pagina.
Laten we nu kijken wat deze code doet als we website.nl/contact intypen:
(.*?) matched contact, namelijk vanaf de RewriteBase tot aan het eind
contact wordt geplaatst op de plaats van $1 dus we laden nu eigenlijk contact.php in. Kortom: Het werkt!
http://www.denniskallansee.nl. Portfolio voor mezelf.
En snap je nu ook hoe het werkt? Zodat je het de volgende keer ook zelf kan? Daar gaat het namelijk om.
.htaccess:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{http_host} ^denniskallansee.nl [NC]
RewriteRule ^(.*)$ http://www.denniskallansee.nl/$1 [R=301,L]
RewriteRule ^portfolio portfolio.php
RewriteRule ^kennis kennis.php
RewriteRule ^contact contact.php
RewriteEngine On
RewriteCond %{http_host} ^denniskallansee.nl [NC]
RewriteRule ^(.*)$ http://www.denniskallansee.nl/$1 [R=301,L]
RewriteRule ^portfolio portfolio.php
RewriteRule ^kennis kennis.php
RewriteRule ^contact contact.php
Dit werkt
Dit werkte niet...
Dat vertaalt de volgende URL in een mooie URL
artikel.php?blog_meta_title=FireFox 4 de grote winnaar!
in artikel/FireFox 4 de grote winnaar!
Nu vraag ik me af hoe zit het met de spaties en het uitroepteken? Moet ik dat nog afvangen dat het bijvoorbeeld zoiets word:
artikel/FireFox_4_de_grote_winnaar
zo ja hoe doe ik zoiets?
Gewijzigd op 23/03/2011 22:30:21 door Pong Zor