Webprogrammør

Simon Jensen

Bloggen med evigt skiftende tema!


 0

mod_rewrite

22. Maj 2006, Kl. 13:14:06 af Simon Jensen

Har du nogen sinde set URLs på formen:
www.mypage.dk/index.php?user=Simon&page=gallery
Dette er sider genereret med et dynamisk sprog som f.eks. PHP (se evt. posten "Vil du også være med? Del. II"), der unikt peger på indhold, som var det på formen:
www.mypage.dk/Simon/gallery.html

Men har du nogen sinde lavet et community, med brugerprofiler og mulighed for flere forskellige funktionaliteter, som f.eks personligt galleri, vil du vide at dette er mere eller mindre umuligt at holde styr på med HTML alene.
Alligevel kan du på f.eks. www.deviantART.com, som nok er verdens største kreative community, se URLs som:
http://user.deviantart.com/gallery/
Her skulle man igen, ved første øjekast, tro at der fantes et katelogene /User/gallery/ med en index-fil af en eller anden slags. Men med sine over 2 millioner brugere og mere end 21 millioner uploads (til dags dato), tvivler jeg meget stærkt på at dette er tilfældet!
Mere sandsynligt er det, at sider på formen /User/gallery/ er blevet mappet over på formen /?user=User&page=gallery - Og det er faktisk muligt!

Måden dette kan håndteres er ved hjælp af et såkaldt re-write modul, som er installeret på webserveren.
Da jeg selv benytter Apache´s webserver, og det er denne jeg har erfaring med, vil det blive denne jeg tager fat på.
Til Apache hedder modulet mod_rewrite, og følger med installationen som standard (til Windows i hvert fald).

mod_rewrite modulet fungerer ved at undersøge den URL der bliver sendt, og teste den op mod nogle rewrite regler.
Reglerne kan defineres i serverens konfigurations fil httpd.conf, eller hvis man ikke har adgang til denne, via en .htaccess-fil. Reglerne defineres vha. regulære udtryk, hvilket nemt kan virke som en gang hyroglyfer ved første møde.
Lad os springe ud i det. Tager vi overstående eksempel fra deviantART, vil målet her være at lave en regel, der mapper:
    /User/gallery
over i:
    /?user=User&page=gallery

Og dette kan vi gøre ved reglen:

RewriteEngine On
RewriteRule ^([a-z] )/([a-z] )/? index.php?user=$1&page=$2 [L]


Skridt for skridt:
- Først lader vi serveren vide at RewriteEngine, som er motoren bag hele modulet, skal være slået til.
- Herefter laver vi regel, der genkender URLs som består af to strenge, med et eller flere af karakterene [a-z] , efterfulgt af en eller ingen slash (/?).
- For hver streng, som er defineret meller paranteserne, substituerer vi disse over i variablen $1, $2, som er værdier for henholdvis user og page.

Og så er vi faktisk kørende. Du kan nu tilgå siden /?user=User&page=gallery med URLen /User/galley. Du skal dog være opmærksom på, at der ikke er nogen magi her, du skal selv i din kode omskrive dine URLs til at benytte den nye struktur, og blot hold for øjet, at de jo faktisk er på den mere forvirende form.

Men hvor skulle ham overhovedet ville gøre dette? Tja - hvad husker du bedst?
/?year=2006&month=May&day=22&id=21
eller
/22-May-2006/mod_rewrite.html
Og det gør søgemaskiner desuden også!

Før jeg skrev denne artikel, var jeg forbi følgende tre sider, som indeholder nogle noget mere detajlerede beskrivelser om både mod_rewrite og regulære udtryk. Er du mere interesseret, er de rigtig gode startsteder:
www.alistapart.com/articles/urls/
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
http://forum.modrewrite.com/


Skriv en kommentar






AddThis Social Bookmark Button


aalborg add on ajax akismet algoritme analyse apache arbejde automatix backup bad gastein beryl billeder blog bot brows browser business buzz cache chat cloaking cms color schemer colorpix compiz fusion crazy eggs css css zengarden design desktop applet deviantart editor error facebook falken productions farver fckeditor feed feedburner ferie firebug firefox flash flickr fokus foto gadget galleri gettext gnome gnu goat google google maps gps gracefull degredation graffiti grafik gravatar hijax hotel htaccess html ie IM install instereo intaller internet explorer internet explorer 6.0 investering ipod it itunes java javascript karneval kunst linux live search livecd meta microsoft mobil mod_rewrite mootools mozbackup mozilla msn musik mysql news omgivelser one.com ooxml opera os pear php pidgin ping pipes png podcast printer programmering projekt prototype proxy qfilm reklame reklamebureau rss screenshot script script.aculo.us seo sjov og spas skole songbird spam sponser standard standarder statistik strand svn test thunderbird tillykke tivoli top 10 twitter ubuntu udvikling validering video vinter vista w3c wallpaper web 2.0 web design web programmering webcrawler webserver windows wordpress xhtml xml xmlrpc xp yahoo youtube