Kterako implementovat url rewrite co nejjednodušší formou za 10min.
Při hledání "jak to udělat" člověk sice najde hromady odkazů, ale všechno je takový složitý a zdlouhavý. Nakonec jsem na nějaký příklad narazil, ale nebylo z něj úplně jasné jak to funguje. V tomto článku přikládám opravdu asi ten nejjednodušší způsob jak url rewriting rozběhnout.
V dnešní době kdo není v "googlu" a dalších vyhledávačích jako by nebyl. Velkou mírou na to , zda se tam ta či která stránka objeví, má i pěkný tvar url adresy např. místo www.neco.cz/shArt.aspx?id=20 bude www.neco.cz/20/jak-jsme-jeli-do-prahy.aspx - a to mají mazlíčkové ehm vyhledávače opravdu rádi.
Tak dost bylo teorie jdeme rovnou k věci.
- Vytvořit v rootu svého webu global.asax (doporučují pomocí VS 2005/8 nebo VWD 2005/8, protože do něj automaticky přidá události)
- Přidat do něj tuto sekci
Private Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim sUrl As String = HttpContext.Current.Request.Url.PathAndQuery
Dim sId As String
Dim shoda As Match
'Response.Write(sUrl)
Dim rRegex As New Regex("/Clanky/(\d+)/(.+).aspx")
shoda = rRegex.Match(sUrl)
If shoda.Groups(1).Success Then
sId = shoda.Groups(1).Value
HttpContext.Current.RewritePath("../../shArt.aspx?id=" + sId)
Return
End If
End Sub
Funguje to následovně:
Mějme stránku shArt.aspx , která je klasickou stránkou zobrazující článek podle očekávaného Request.QueryStringu("id") - což je idčko článku v databázi.
Tak a teď máme např default.aspx - výchozí stránku webu na které máme např GridView , který nám generuje odkazy na články. OK.
Sumárum:
default.aspx = seznam článků
shArt.aspx = detail článku podle předaného id. - V default.aspx máme zmiňovaný GridView což může vypadat nějak takto:
<asp:GridView ID="MainClanky" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div>
<a href="Clanky/<%# Eval("id") %>/
<%#RemoveDiacritics(Replace(Eval("Nadpis")," ","-")) %>.aspx">
<%# Eval("Nadpis") %>
</a></div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView> - Jak vídíte zde, skládáme strukturu odkazu:
Clanky/IdClanku/nazev-clanku-bez-diakritiky-mezera-je-nahrazena-pomlckou.aspx
takže finálně např.:
Clanky/86/nazev-clanku-bez-diakritiky-mezera-je-nahrazena-pomlckou.aspx
Pro zjednodušení bez formátovacích funkcí:
<a href="Clanky/<%# Eval("id") %>/<%#Eval("Nadpis")%>.aspx">
<%# Eval("Nadpis") %></a>
Pozor:
Při sestavování odkazu viz. výše a psaní porovnávacího pravidla v global.asax dejte pozor - je to case sensitive tzn. když do odkazu napíšu /clanky/..... a v pravidle v global.asax bude
Clanky/(\d+)/(.+).aspx tak to nebude fungovat. "C" musí být na obou stranách stejné.
Jinak toto celé funguje na regulerních výrazech - ja tomu moc nerozumím tak si to kdyžtak nastudujte na [wiki]
To je asi tak vše. Cesta ve formátu www.neco.cz/Clanky/86/nazev-clanku-bez-diakritiky-mezera-je-nahrazena-pomlckou.aspx je naprosto virtuální nevztahuje se k žádné fyzické struktuře na disku.Poslední věc, kterou musím zmínit je to, že po implementaci url rewritingu přestanou fungovat obrázky a styly.
Příklad.
To co bylo ve stránce shArt.aspx linkováno např. tímto způsobem:
<img src="images/logo.jpg">
musíte přepsat na:
<img src="../../images/logo.jpg">
Toto se týka obrázků, css stylsheetů atd. Je to vlastně vynoření z virtuální adresy /Clanky/idClanku/
Doufám, že se v tomto návodu moc neztratíte a pomůže vám při implementaci url rewritingu na vašich stránkách.
ae3bb3d0-a9c3-41c0-a43c-2affd1b82451|0|.0
Sdílet: