maandag 22 november 2010

Url Rewriting

SEO (Search engine optimalization) is hip.
Terecht zou ik zeggen, want als Google je niet vindt dan vindt niemand je.
Als je verdieping gaat zoeken betreffende SEO dan begrijp je al snel dat de belangrijkste factor voor succes semantieke samenhang is. De url moet wat zeggen over het artikel.
Maar wat nou als je net een jaar lang bezig bent een heel stevige business applicatie op te tuigen voor intranet doeleinden en men besluit dezelfde app buiten op internet te gaan gebruiken.
Dan zijn onderstaande urls niet echt optimaal.


Geen mens die iets zinnigs over deze urls kan vertellen, laat staan een zoekmachine. Google snapt domweg niet het semantieke verband tussen url en content. Daar bij komt in dit geval ook nog dat beide urls nagenoeg gelijk zijn omdat beide sites uit het zelfde framework worden gegenereerd.
De eerste url is een catalogus voor plaatwerk voor auto's en de tweede voor olie en vloeistoffen.

Hoe lossen we dit op?
Laten we eerst de vraag stellen hoe we de urls dan wel graag willen zien.

http://plaatwerk.nl/merk/audi/type/A4/categorie/bumpers
http://vloeistoffen.nl/merk/audi/type/A4/categorie/koelvloeistof

Met deze urls is het meteen duidelijk wat we kunnen verwachten, dus kunnen we er van uit gaan dat Google het nu ook snapt.
Maar hoe lossen we dit technisch op? De gehele url structuur in de applicatie wijzigen zou een karwei van omvang zijn en hoe houden we het dan backwords compatibel?

Url Rewriting is hier het antwoord.
En de .net omgeving geeft ons goede mogelijkheden hiertoe. In een .net webapplicatie kunnen we het volgende bestand vinden:
'Global.asax'
In Global.asax kunnen we de volgende event ontsluiten:

protected void Application_BeginRequest(object sender, EventArgs e) { }

Deze event is de eerste die wordt getriggered wanneer een request wordt gedaan aan de webserver.
In deze event kunnen we de aanvragende url verkrijgen via 'Request.Url.OriginalString'.

We gaan er van uit dat onze systeembeheerder het domein plaatwerk.nl naar onze webserver heeft gelinkt.
en dat een gebruiker het volgende in de browser heeft ingetikt:

http://plaatwerk.nl/merk/audi/type/A4/categorie/bumpers.

Deze url zullen we nu moeten herschrijven naar een url die begrepen wordt door onze applicatie.

http://shop1.hbase.nl/default.aspx?shopid=3&merk=DAT&type=350&groupid=40

We zullen methodes moeten bouwen welke de volgende data verzamelen

http://plaatwerk.nl
Haal shopid uit alias tabel
Shopid=3
merk/audi
Haal autocode uit merktabel
Merk=AD
type/A4
Haal autotypecode uit autotype tabel
Type=350
categorie/bumpers
Haal subgroup code uit categorien tabel
Groupid=40

Ik vat deze methodes hier samen als : "RewriteLogicUrl(string url)"
De laatste stap die we moeten uitvoeren is om met 'Context.RewritePath()' de herschreven url in de context te plaatsen.

protected void Application_BeginRequest(object sender, EventArgs e){
  string logicUrl = Request.Url.OriginalString;
  string systemUrl = RewriteLogicUrl(logicUrl);
  Context.RewritePath(systemUrl);



Thats all folks.