Zonder mod_rewrite toch (seo)vriendelijke url

Door StephanVierkant op maandag 31 mei 2010 22:05 - Reacties (9)
Categorie: php, Views: 5.767

Veel (beginnende) programmeurs stoeien met het probleem van de 'vriendelijke' url. Geen domein.tld/weblog.php?id=1&foo=bar maar gewoon domein.tld/weblog/1/bar

Er zijn verschillende opties:
  • De eerste is lekker gemakkelijk: gebruik Wordpress ;) (of natuurlijk een ander CMS);
  • Een tweede optie is je te verdiepen in mod_rewrite. Google is your friend;
  • Onderstaande optie:
Ik kwam de optie ooit ergens tegen en gebruik hem nog steeds regelmatig. Het is handig voor mensen die geen zin hebben zich te verdiepen in mod_rewrite en toch even snel iets in elkaar willen zetten.

Stap 1: htaccess
Allereerst moet je dit in je .htaccess zetten:

code:
1
Options Indexes FollowSymLinks MultiViews All



Stap 2: variabelen definiëren
Plaats dit boven iedere pagina waar je het wilt gebruiken:

PHP:
1
list ($id, $foo) = explode("/", substr($_SERVER['PATH_INFO'],1));



Stap 3: use it!
Gemakkelijker kunnen we het niet maken. Gewoon $id en $foo aanroepen!

Eerlijk is eerlijk, het is niet de ideale optie; maar ik wilde hem toch wel even noemen.

Volgende: Disqus en Google Analytics 12-'10 Disqus en Google Analytics

Reacties


Door Tweakers user crisp, maandag 31 mei 2010 22:21

Kan je dan misschien ook uitleggen wat de voor- en nadelen zijn van multiviews tov url-rewriting? En wat denk je dat wij gebruiken hier op Tweakers.net (en de Tweakblogs)? ;)

Door Tweakers user ACM, maandag 31 mei 2010 22:22

Je hebt alleen MultiViews nodig hoor... die andere opties zijn overbodig.

Verder vraag ik me af waarom je in kleine letters onderaan roept dat het niet een ideale optie is. Het is een stuk handiger dan proberen met mod_rewrite-rules je wijzigende parameter- en file-structuur bij te houden.

Door Tweakers user VincentG, maandag 31 mei 2010 22:31

Heb zelf ook eens soortgelijke functies geschreven voor 'nette' url's.
In een enkele geval kon je niet alle gewenste mogelijkheden van een .htaccess bestand gebruikt en moest ik wel weer met mod_rewrite aan de slag. Maar het is gewoon stuk prettiger als je niet alle pagina's hoeft op te nemen en later gemakkelijk een pagina kan wijzigen of toevoegen (qua bestandsnaam bijv).

Door Tweakers user Booster, maandag 31 mei 2010 23:12

Ik gebruik zelf:

code:
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]



In index.php vang ik vervolgens de inhoud van $_SERVER['REQUEST_URI'] af om te bepalen welke pagina uit de tree geladen moet worden.

Volgensmij is multiviews daarmee overbodig. Het probleem dat ik altijd met multiviews had, was dat als ik de URI wilde passen aan index.php, de URL dan altijd moest beginnen met /index/[params].

Met mijn oplossing was dat netjes weggewerkt.

Door Tweakers user d.baars, dinsdag 1 juni 2010 01:11

Volgens mij is mod_rewrite, wanneer je het in de Apache config ipv een .htaccess bestand gebruikt veel sneller dan de MultiViews manier (al dan niet in een .htaccess), en als je toch al .htaccess gebruikt kan je net zo goed de rewrite rules hierin plaatsen. Het gebruik van een .htaccess bestand geeft namelijk een behoorlijke overhead ;)

Door Tweakers user twanvl, dinsdag 1 juni 2010 03:34

Zonder .htaccess bestand kan je ook gewoon "domein.tld/weblog.php/1/bar" schrijven. Het script weblog.php vangt dit dan af, en "1/bar" komt in $_SERVER['PATH_INFO'].

Door Tweakers user Rowdy.nl, dinsdag 1 juni 2010 09:49

crisp schreef op maandag 31 mei 2010 @ 22:21:
Kan je dan misschien ook uitleggen wat de voor- en nadelen zijn van multiviews tov url-rewriting? En wat denk je dat wij gebruiken hier op Tweakers.net (en de Tweakblogs)? ;)
Met ^^... ;)

Anders crisp, enlighten us? ;)

Door DigiDaan, dinsdag 1 juni 2010 16:10

Dat is makkelijk en handig! Meteen toegepast, dank!

Door Tweakers user Barleone, dinsdag 1 juni 2010 22:40

Rowdy.nl schreef op dinsdag 01 juni 2010 @ 09:49:
[...]
Met ^^... ;)

Anders crisp, enlighten us? ;)
Met Rowdy. cri-hisp! cri-hisp! (bij wijze van aanmoediging) ;)

[Reactie gewijzigd op dinsdag 1 juni 2010 22:40]


Reageren is niet meer mogelijk