Tags: , , , | Rubrika: Software Pavel Švarc | 22.5.2008 12:37 | Komentáře (0)

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.

  1. 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)
  2. 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.
  3. 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>
  4. 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.

Přidat komentář




  Country flag

biuquote
  • Komentář
  • Náhled
Loading