Url rewriting u asp.netu
- Posted in:
- Web dev
Naime radi se o ovome; kako adresu: http://www.somesite.com/Proizvod.aspx?id=41
pretvoriti u ovako nešto: http://www.somesite.com/Engines/WarpCore-TDI/
Već duže vrijeme gledam PHP site-ove koji imaju lijepo napisane URLove, i neprestano se čudim zašto malo koji web site napravljen u ASP.NETu slijedi tu praksu. Apache i PHP imaju .htaccess, koji im je tamo pred nosom, i uz malo Regex znanja svi ga koriste. Ali .net developeri nemaju takvu datoteku, ili im nije pred nosom, pa valjda malo tko zna kako u samom .net Frameworku postoji solidna podrška za prepisivanje URLova i nekoliko open source frameworka koji to isto rade bez potrebe pisanja linije koda.
Scott Guthrie je već na svojem blogu pokazao nekoliko načina za prepisivanje URL adresa. Ima ih nekoliko, ali svi se oslanjaju na metodu unutar HttpContext-a:
HttpContext.Current.RewritePath();
kojoj se može pristupiti preko BeginRequest eventa unutar Global.asax datoteke, ili izradom HttpModula koji se kasnije može reusati.
Ja neću pisati svoj url rewriter, niti pokazivati kako se radi sa spomenutom metodom, jer smatram da je za ovakve “infrastrukturne” potrebe pametnije iskoristiti neki gotov framework (osim ako se radi o učenju frameworka!). Pokazati ću kako se može iskoristiti UrlRewritingNet framework za dobiti pravilne Url adrese, te koji su trikovi, mane i prednosti upotrebe istog. [more]
Preuzeto iz dokumentacije:
What is UrlRewritingNet.UrlRewrite?
UrlRewritingNet.UrlRewrite is a module which could be embedded in an ASP.NET 2.0 application to
rewrite Urls (Internet addresses) for displaying the user another URL than used from the server. With
UrlRewritingNet.UrlRewrite you only have to define a few simple rules for rewriting your addresses.
Način rada:
- Regex patterni url-ova su definirani u Web.config datoteci
npr: “~/novosti/(.*)/(.*).aspx” - Kod svakog requesta za stranicom, UrlRewriting prolazi kroz sve patterne dokle ne naiđe na onaj koji zadovoljava upisani Url
- Prepisivanje URLa:
~/novosti/naslov-vijesti/567.aspx se prepisuje u /novosti.aspx?id=567 - stranica vidi prepisani Url
Postupak konfiguriranja UrlRewritingNet:
- skinite potrebni DLL sa službenog sitea i referencirajte ga u svome projektu
- u Web.Configu pod sekcijom <httpModules> dodajte:
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
i pod <configSections>:
<configSections> <section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission ="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" /> </configSections>
- Dodajte ruleove (sa regex patternima):
<add name="novosti" virtualUrl="^~/novosti/(.*)/(.*).aspx" destinationUrl="~/news.aspx?naslov=$1&id=$2" ignoreCase="true" />
ovo je samo jedan primjer, a vi si ih dodajte po želji, koliko god je potrebno za web site. Primjetite $1 i $2 u destinationUrl. Na to se mapira prvi i drugi regex “(.*")” iz virtualUrl (“.*” u regex jeziku znači proizvoljan broj znakova) - U samom code-behindeu stranice sada možete pristupiti parametrima preko Request.QueryString, kao što ste i prije radili. Postoje još opcije da se QueryString parametri spreme u HttpContext.Items, da se parametri igroriraju i sl., ali više o tome i drugim opcijama možete pogledat u dokumentaciji frameworka.
U adresi, odnosno danim primjerima se i dalje nalazi “.aspx” nastavak. Naime, kod IIS6 web servera ASP.NET frameworku se prepuštaju samo requesti sa određenim ekstenzijama (aspx, ascx, asmx, axd,…). Da smo u ruleu (patternu) postavili virtualUrl=”~/Novosti/(.*)/” , bez aspx, taj request ne bi bio uopće proslijeđen .net Frameworku. U slučaju IIS7, Url-ovi bez ekstenzije bi trebali raditi, barem u Integrated pipeline-u. Ako želite i na IIS6 koristiti Url-ove bez ekstenzije, morati će te konfigurirati IIS da prosljeđuje sve requeste .net-u (opis dostupan u dokumentaciji), ali takve stvari pružatelji hostinga (shared prvenstveno) rijetko dozvoljavaju. Eventualno će te ih moći nagovoriti da mapiraju .htm i .html ekstenziju na .net. Što se tiče samog Googla, mišljenja su oprečna o tome dali on više voli Url-ove bez ekstenzije ili sa njom. Ako stranica ima loš i nekvalitetan sadržaj, nikakav Url vas neće spasiti od loše pozicije u google indexu ;)
Nadam se da je pomoglo, i da će vam ovaj kratki post omogućiti da i sami primijenite popularni Url Rewriting u svome projektu!
Comments
Bravo... napokon malo da i .netovci počnu raditi URL rewrite :)
Chande