Továrna na absolutní URL: rewriting pomocí IHttpHanderFactory

U řady webových aplikací (tento blog nevyjímaje) jest se setkati se zvláštním formátem URL, kdy je nějaký parametr (třeba ID článku) předáván nikoliv jako hodnota v Query Stringu (http://server/Clanek.aspx?ID=neco), ale přímo jako název souboru (http://server/Clanky/neco.aspx). Důvodů k tomu vedoucích může být povícero, ale obvykle převažuje skutečnost, že tato URL jsou obvykle snáze indexovatelná vyhledávači - a protože se právě nacházíme na vrcholu SEO bubliny, musí to mít každý.

Samozřejmě to neznamená, že by publikační systém generoval pro každý článek zvláštní skript, ale používá se technika zvaná URL rewriting. V rámci zpracování HTTP požadavku (více o request pipeline v ASP.NET) se na základě vygenerovaných pravidel URL "přepíše" a na straně serveru přesměruje na jinou stránku.

Context.RewritePath

Nejjednodušší metodu URL rewritingu představuje metoda System.Web.HttpContext.Current.RewritePath, volaná příkladně v rámci události BeginRequest.

Její použití však má mnohá úskalí. Především pak to, že přepsání se provede takříkajíc "napůl". Onen cílový skript totiž principiálně vůbec netuší, že se stal obětí URL rewritingu, a veškeré případné mapování se děje s ohledem na jeho adresu, nikoliv na původně požadovanou. Nejobvyklejším projevem je, že přestane fungovat postback.

V aplikacích založených na ASP.NET 2.0 (Whidbey) přestane fungovat skoro všechno, protože na relativním odkazování je založeno kdeco, od vyhodnocování odkazů přes postback až po témata.

Továrna na handlery

Klíčovou roli při zpracování ASP.NET požadavků představují HTTP handlery. Žil jsem v bludu, neb jsem myslel, že jsem je už na tomto serveru někdy do huby bral, ale není tomu tak (až na stručnou zmínku ve shora odkazovaném článku). V dohledné době to napravím, pro tento okamžik se spokojte s oním jedním odstavcem.

Obvykle se vykonávání nějakého URL či typu URL spojuje s určitým handlerem přímo, protože dopředu víme, co budeme chtít. Vyšší školu představují situace, kdy to podle URL nevíme a je nutno o tomto dynamicky rozhodnout. Pro tento účel disponuje .NET továrnou na výrobu handlerů - HTTP Handler Factory.

Jedná se o třídu, implementující interface IHttpHandlerFactory. Ta přijme HTTP požadavek, hluboce se nad ním zamyslí, a namísto aby jej osobně zpracovala, vrátí zpět informaci o tom, kterému handleru má framework předmětný požadavek hodit na hrb.

Tohoto chování jest možno využít pro URL rewriting. Zpracování klasických web formů (*.aspx) totiž také probíhá formou HTTP handleru. Máme možnost tedy možnost zneužít ubohý ASPX soubor ke zpracování požadavku, aniž by tento tušil, že jeho identita zůstane utajena. Veškeré mapování se tak bude provádět relativně vůči původně požadovanému URL, postback bude fungovat a všichni se budou mít rádi.

Háček je v tom, že případné parametry (jako název požadovaného souboru) nelze podvrhnout například formou vygenerovaných Query String parametrů, neb vlastní URL zůstává nezměněno. Pro předávání informací mezi jednotlivými částmi ASP.NET pipeline jest určena kolekce System.Web.HttpContext.Current.Items. Můžete si ji představit jako určitou formu cache, která je platná toliko po dobu životnosti jednoho požadavku.

Praktický příklad

Mějmež web publikující články. Přejeme si, aby adresa článku byla vždy /Articles/nejakeid.aspx. Vlastní zobrazení článku provádí stránka /Article.aspx, a ono dříve zmíněné nejakeid je pro něj informace o tom, který článek má z databáze vytáhnout.

Začneme tím, že vytvoříme továrnu na handlery. Konkrétně třídu Remapper, která bude implementovat rozhraní IHttpHandlerFactory:

Imports Microsoft.VisualBasic
Public Class Remapper
    Implements IHttpHandlerFactory
    Public Function GetHandler(ByVal context As System.Web.HttpContext, ByVal requestType As String, ByVal url As String, ByVal pathTranslated As String) As System.Web.IHttpHandler Implements System.Web.IHttpHandlerFactory.GetHandler
        ' Put article ID - name of 'virtual' ASPX page - to request cache
        context.Items("ArticleID") = System.IO.Path.GetFileNameWithoutExtension(pathTranslated)
        ' Handle request via ~/Article.aspx script
        Return PageParser.GetCompiledPageInstance("~/Article.aspx", _
            context.Server.MapPath("~/Article.aspx"), _
            context)
    End Function
    Public Sub ReleaseHandler(ByVal handler As System.Web.IHttpHandler) Implements System.Web.IHttpHandlerFactory.ReleaseHandler
    End Sub
End Class

Metoda GetHandler načte název požadovaného souboru bez přípony a uloží jej jako prvek s klíčem ArticleID do context cache. Následně pak vyvolá instanci handleru pro stránku ~/Article.aspx a vráti jí zpět k vykonání.

Stránka ~/Article.aspx je primitivní, neb jenom vezme jí předané ArticleID a zobrazí ho:

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Me.LabelArticleID.Text = String.Format(Me.LabelArticleID.Text, Context.Items("ArticleID"))
    End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="LabelArticleID" runat="server" Text="Article ID = {0}" />
        </div>
    </form>
</body>
</html>

Poslední nezbytnou komponentou systému je vhodné nastavení v souboru Web.Config. Námi vygenerovanou třídu Remapper je nutno přidat jako handler požadavků pro patřičné URL (articles/*.aspx):

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <system.web>
      <httpHandlers>
        <add verb="*" path="Articles/*.aspx" type="Remapper"/>
      </httpHandlers>
    </system.web>
</configuration>

Kompletní ukázkovou aplikaci jest možno si stáhnout zde. Je určena, stejně jako výše uvedený kód, pro ASP.NET 2.0 (Whidbey), leč popsaná metoda funguje i ve verzi 1.1.

Titulek:
Text komentáře:
Vaše jméno:
Váš e-mail: (nebude zveřejněn)

WWW stránka:
Opište text z obrázku:
odpovědětodpovědět Gravatar

URL rewriting

12.8.2005 9:54:1712.8.2005 9:54:17 matobmatob ---.dsl.nextra.sk

Mozno by stalo za zmienku ze NET 2.0 ma uz zabudovany jednoduchy URL rewriting (urlMappings). Pouzitie vo webconfigu:

<urlMappings enabled="true">

<add url="~/Regster.aspx" mappedUrl="~/Gen.aspx?p=registration" />

</urlMappings>

Je to dost primitivne riesenie, ale pri malych weboch a s pouzitim dalsich vymozenosti NET 2.0 ako sitemap to moze byt velmi zaujimave.

Nevie niekto poradit nieco zlozitejsie? Nejaku spicku URL rewritingu v NET? Dakujem.

Není to sice .NET záležitost, ale pěkný ISAPI filtr na přepisování URL si můžete stáhnout zde: http://www.isapirewrite.com

Jeho předností je definice URL rewritingu pomocí regular expressions a navíc je pekelně rychlý.

Ty vestavěné UrlMappings jsou dost na houby, protože to nepřepisují kompletně, jak píšu v článku - člověk se dostane do problémů s tím relativním mapováním.

Problém s tím, že i když v global asaxu url přepíšeme, a v přepsané stránce zůstane atribut action s původní adresou před přepsáním (důvod proč nefungují postbacky) se jednoduše vyřeší tím, že v page_init zavoláme url rewrite ještě jednou.

odpovědětodpovědět Gravatar

Bez teto metody volany v onloadu nebude formular postbackovat!

void RewriteURL()

{

string sFile = Request.RawUrl.Substring(Request.RawUrl.LastIndexOf("/") + 1);

HttpContext.Current.RewritePath(sFile, "", "");

}

odpovědětodpovědět Gravatar

RE: Bez teto metody volany v onloadu nebude formular postbackovat!

A to se vztahuje k cemu? Jestli k RewritePath, tak to je pravdepodobne. Jestli k IHttpHandlerFactory, tak to potreba neni -- alespon ne ve Whidbey, pod 1.1 jsem to nezkousel.

odpovědětodpovědět Gravatar

RE: Bez teto metody volany v onloadu nebude formular postbackovat!

Jasne, vztahuje se pouze k URL rewrite provadeneho pomoci metody RewritePath v global.asax metode Begin Request

odpovědětodpovědět Gravatar

URL rewriting a crawlery a roboti

8.9.2005 19:28:328.9.2005 19:28:32 OndřejOndřej 84.16.97.---

No, zkoušel jsem to, moc se mi to líbí, ale zjistil jsem, že takto rewritované stránky ignorují vyhledávače (zkoušel jsem google, seznam, jyxo), zaindexuji takovou stránku bez ničeho pouze s informaci document moved to /

To mě docela mrzi, neví někdo jak to vyřešit?

odpovědětodpovědět Gravatar

RE: URL rewriting a crawlery a roboti

Pokud se vyhledávače chovají takto, pak se nejedná o rewriting, ale o nějakou formu redirectu. URL rewriting je serverová záležitost, klienta se netýká, nemá možnost zjistit, že k němu došlo.

odpovědětodpovědět Gravatar

nejjednodussi url rewrite

V begin requestu:

HttpContext.Current.RewritePath

V page onloadu:

Context.RewritePath(Path.GetFileName(Request.RawUrl));

A žádnej postback problém neexistuje...

Zdravím,

pokoušel jsem se pomocí

HttpContext.Current.RewritePath();

přepsat adresu u svých článků ... znáte to:

např. z article.aspx?id=34214 na articles/nazev-meho-clanku.aspx.

Využil jsem v global.asaxu Application_BeginRequest

a myslím, že úspěšně dokážů tu adresu přepsat apod.

Můj problém spočívá ale v tom, že mám u toho článku i diskuzi, kde když odešlete komentář, tak vám to nahlásí chybu. Tipuju, že důvodem je postback(jak už ste někdo zmiňoval výše), nebo tak něco.

Prostě to je nejspíš problém s tou adresou.

Nedokázali byste mi poradit co s tím?

Odpově'd najdete v tom článku, ke kterému jste psal komentář.

odpovědětodpovědět Gravatar

Relativní mapování?!

19.5.2006 8:12:4319.5.2006 8:12:43 Jaromír III.Jaromír III. ---.cust.avonet.cz

Pokouším se využít továrničku na handlery pro URL rewriting, ale narazil jsme na problém. Přepisuju-li adresu "articles/articleid.aspx" na "article.aspx?id=articleid" všechny runat=server prvky se mi přemapují dobře, postback funguje, ale jiné mapování - např. u stylového souboru - je špatné, protože se nastaví na "articles/styly.css". Dělám něco špatně, nebo budu muset všechno mapování ošetřit?

Pomocí shora uvedené metody nemůžete přepsat adresu na něco s query stringem. Obecně mnou popisovaná metoda tneto problém řeší, takže pokud ho nadále máte, děláte něco špatně.

odpovědětodpovědět Gravatar

RE: Relativní mapování?!

19.5.2006 10:41:2319.5.2006 10:41:23 Jaromír III.Jaromír III. ---.cust.avonet.cz

To je pravda. Nevyjádřil jsem se přesně, ale s předáváním parametrů problém nemám, to funguje pomocí context.items perfektně. Nemůžu si ovšem pomoci, ale ani když použiju přesně váš příklad, nepřemapují se mi prvky které nejsou serverové. Tedy, vložím-li na stránku "Article.aspx" dva stejné obrázky a jednomu dám parametr runat=server a druhému ne, provedu rewrite, tak se mi správně zobrazí pouze servrový obrázek. Druhý se zarputile domáhá obrázku z neexistujícího adresáře "articles". Podotýkám, že všechno je zapouzdřeno v runat=server formu. Funguju na .NET 1.1 a obávám se, že problém je zakopaný bohužel zde... :-(

Dobrý den, nebyl by někdo ochoten to přepsat do C#? VB je pro mě španělská vesnice a tento postup by se mi velice hodil. Předem děkuji, J.B.

odpovědětodpovědět Gravatar

RE: ukázka v C#?

Takže jsem to po pár hodinách přelouskávání z VB.NET dal do funkční podoby v C# a šel se psychicky uklidnit k Vaší šesté přednášce o novinkách v ASP.NET 2.0, jsem z hrůzou zjistil, že toto téma je v daném videu rozebírané a dokonce se zde nachází ukázka v C#. :-) Aspoň mě může těšit fakt, že jsem na to přisel "sám". :D

odpovědětodpovědět Gravatar

URL rewriting bez přípony

Dobrý den,

již hodnou chvíli procházím různé internetové stránky ohledně URL rewritingu. Zajímalo by mě, jestli lze pomocí běžných technik dosáhnout přepsání url ze tvaru: http://www.server.cz/123 na http://www.server.cz/Clanek.aspx?id=123 . Podařilo se mi toho dosáhnout více způsoby, ale pouze na "malém vývojovém serveru", který je součástí Visual Studia, ale po nahrátí na "ostrý" server na webu přestane přepisování fungovat. Je chyba v konfiguraci serveru? A pokud ano, lze požádat poskytovatele o změnu konfigurace?

Prosím někoho s většími zkušenostmi o radu.

odpovědětodpovědět Gravatar

RE: URL rewriting bez přípony

Pro URL rewriting bez přípony potřebujete speciální nastavení serveru, takzvané wildcard application maps. Viz zde: http://www.aspnet.cz/Articles/10-pohled-do-hlubin-webserverovy-duse-aneb-jak-funguji-http-moduly-a-handlery.aspx

odpovědětodpovědět Gravatar

událost Button.Click na stránce Article.aspx

2.3.2007 15:15:162.3.2007 15:15:16 LáďaLáďa 195.250.142.---

Když přidám na takovouhle stránku (v tomto příkladu Article.aspx) tlačítko a na událost Click dám Response.Redirect("Default.aspx") tak mě to hodí na neexistující stránku např. z Articles/cokoliv.aspx na /cokoliv.aspx. Nakonec jsem zjistil, že ať dám do události Click na této stránce cokoliv, nemusí to být response.redirect, tak to udělá to samé.. /cokoliv.aspx The resource cannot be found. Nevíte někdo čím to je, případně jak to ošetřit aby to fungovalo jak má? Díky

odpovědětodpovědět Gravatar

RE: událost Button.Click na stránce Article.aspx

6.8.2007 22:19:586.8.2007 22:19:58 giusgius ---.sh.cvut.cz

Tady je elegantní řešení, které opravdu funguje: http://www.simple-talk.com/dotnet/asp.ne…

odpovědětodpovědět Gravatar

http://server.cz/moje-stranka

23.8.2007 12:48:1623.8.2007 12:48:16 RobRob ---.morava.adsl-llu.static.bluetone.cz

Tak jsem různě hledal a experimentoval a nepodařilo se mi stále vychytat své řešení tak, aby fungovalo. Tak doufám, že mi náhled odborníků pomůže. Chci mít url ve tvaru http://server.com/moje-stranka/ . Řešení zatím vypadá tak, že mám zaregistrovaný HTTP modul, registruje událost BeginRequest a přidává do ní kontrolu, zda-li Request.Url.Host neobsahuje "www", pokud ano, přesměrovává přes kód 301 na variantu bez "www". Dále mám HTTP Handler Factory, která se mě stará o vlastní logiku url rewritingu. Vše funguje báječně, do doby, pokud někdo zadá url na konci bez lomítka (http://server.cz/moje-stranka) potom web spadne do 404ky. Testoval jsem to zatím jen ve VS web serveru, na hostingu bohužel zrovna nemám možnost:( Je nějaká možnost, jak i tyto url bez lomítka prohnat zmiňovaným http modulem, kde se o doplnění lomítka a přesměrování již můžu postarat?

Díky za každý návrh

odpovědětodpovědět Gravatar

RE: http://server.cz/moje-stranka

23.8.2007 13:09:2023.8.2007 13:09:20 RobRob ---.morava.adsl-llu.static.bluetone.cz

Děkuji za bleskovou odpověď, nicméně článek jsem (a detailně) přečetl již před samotným dotazem. Odpověď jsem v něm ale nenašel:( Počkám, uvidíme, až budu mít uvedené možnost vyzkoušet na hostingu.

odpovědětodpovědět Gravatar

RE: http://server.cz/moje-stranka

Odpověď je taková, že na tom vestavěném serveru to chodit nebude. Na IIS 6 možná, podle toho jestli máte povolený wildcard application mapping.

odpovědětodpovědět Gravatar

RE: http://server.cz/moje-stranka

20.11.2007 3:09:3820.11.2007 3:09:38 RobRob ---.morava.adsl-llu.static.bluetone.cz

pěkný večer,

problém zde popisovaný se vyrešil náramně, krásně mi to chodí doma i na testovacím freehostingu. Když sem ale aplikaci chtěl nasadit na produkční server, začala se chovat velmi zvláštně.

například mám toto url:

server.cz/informace/ -> server.cz/Pages/Informations.aspx

veškerý web je přímo umístěn v rootu, čili například:

server.cz/App_Themes

server.cz/Images/img.jpg

server.cz/Pages/ <- zde jsou jednotlivé stránky aplikace

Problém je ten, že nefuguje relativní adresování. Používám IHttpHandler factory, ale stránka se chová podobně, jako při RewritePath, prostě to adresuje jakoby z jiného adresáře, moc nerozumím tomu ze kterého a kde se to v té aplikaci bere.

Čili při url server.cz/informace/

má asp.net vygenerovat při použití témat toto:

<link href="../App_Themes/Classic/Style.css" type="text/css" rel="stylesheet" />

čili zobrazí styl v server.cz/informace/../App_Themes/Classic/Style.css = server.cz/App_Themes/Classic/Style.css- což je správné url

ale výsledek je tento:

<link href="App_Themes/Classic/Style.css" type="text/css" rel="stylesheet" />

čili server.cz/informace/App_Themes/Classic/Style.css, kde samozřejmě žádný css styl není, jelikož část /informace/ je vlastně blud rewritu.

Podobně zmatená situace je s obrázky:

má být:

server.cz/Images/TopFoto/Informations.jpg

a je

server.cz/informace/Images/TopFoto/Informations.jpg

Teď když si to po sobě znovu čtu, vypadá to, že aplikace si myslí, že se nachází v rootu webu -> pravděpodobně neví, že klient požadoval "podadresář" /informace/.

Zajímavý při porovnání s RewritePath je fakt, že postback se zdá být fungující i nadále.

Zkoušel jsem to například na FormView, kde jsem několikrát problikl přes příkazy Edit, Update a Cancel, stejně tak zkusil odeslat formulář postbackem a vše fungovalo skvěle.

Vůbec si nevím rady, kde hledat problém, pokud zadám přímo stránku server.cz/Pages/Informations.aspx, vše je ok, ale při rewritu je zle.

Omlouvám se za trochu zmatený příspěvek, ale já sem z toho také zmatený. Rád na vše odpovím, nevím, jak lépe bych mohl problém popsat.

Rob

odpovědětodpovědět Gravatar

RE: http://server.cz/moje-stranka

20.11.2007 12:31:3620.11.2007 12:31:36 RobRob ---.morava.adsl-llu.static.bluetone.cz

Ozývám se po probděné noci s dalšími informacemi:

-zdá se, že celé relativní adresování je o jednu úroveň posunuto, uvedu příklad na css souboru

při url server.cz/katalog/ by <link> měl vypadat takto:

<link href="../App_Themes/Cl....> Ale vypadá takto:

<link href="App_Themes/Cl....>

a při url server.cz/katalog/kategorie/ by <link> měl vypadat takto:

<link href="../../App_Themes/Cl...> a vypadá takto:

<link href="../App_Themes/Cl...>

Stejného výsledku dosáhnu, když někde ve stránce používám konstrukci "~/" (např. v <asp:Image>) - také je to posunuté o jednu úrovneň. Zajímavé ale je, že pokud použiji Server.MapPath("~/") - vrátí mi to správné zanoření. Nedokážu si to vysvětlit, možná by jenom stačilo poradit, jak ASP.NET nakládá s "~/", pak bych třeba pomocí .NET Reflectoru dokázal najít chybu.

Děkuji všem za každou informaci.

PS: možná jsem ještě nezmínil, že používám Wildcart Application Mapping, ale přišlo mi, že je to z url patrné.

odpovědětodpovědět Gravatar

Problém s vnořeným web.config

22.9.2008 21:51:5822.9.2008 21:51:58 AikAik ---.nsys.cz

Implementoval jsem výše zmíněný postup rewritingu. Vše pracuje jak má, ale mam problém s autorizaci. Adresu www.domena.cz/admin/editsitemap.aspx presmerovavam na ~/customers/xx/admin/editsitemap.aspx. V adresaři ~/customers/xx/admin je soubor web.config s obsahem:

<?xml version="1.0"?>

<configuration>

<appSettings/>

<system.web>

<authorization>

<deny users="?"/>

</authorization>

</system.web>

</configuration>

Podle všeho by měl být k souborům v adresáři ~/customers/xx/admin/ povolen jenom přihlášeným uživatelů.

Bohužel to tak nefunguje. Nejspíš není problém s autorizaci, ale se souborem web.config. Zdá se, že není vůbec brán v úvahu při zadání url požadavku který je "přesměrován" do adresáře s tímto web.config.

Budu rád pokud mě někdo nasměruje správným směrem.

odpovědětodpovědět Gravatar

RE: Problém s vnořeným web.config

UrlAuthorization skutečně rewriting nebere v úvahu - bere v úvahu pouze URL zadanou uživatelem, je to jedna z jeho definujících vlastností. Musíte tedy nastavit pravidla odpovídajícím způsobem a nebo si napsat vlastní autorizační modul, který bude brát v úvahu vaše specifická pravidla.

odpovědětodpovědět Gravatar

URL rewriting a Ajax

24.9.2008 12:15:5724.9.2008 12:15:57 RudisRudis ---.nowire.cz

Dobrý den,

chtěl jsem se optat, zda lze využít továrnu i na přesměrování stránek využívajících AJAX?

Podle článku jsem již mapování úspěšně vytvořil, ale při použití Ajaxu a UpdatePanelu se mi vždy překreslí celá stránka. Problém vidím v tom, že při Ajaxovém volání se samozřejmě zase volá handler. Řešení bych viděl v jiném přesměrování Ajaxových požadavků, ale nepřišel jsem na to jak.

Děkuji

odpovědětodpovědět Gravatar

Focus()

9.10.2008 11:53:109.10.2008 11:53:10 RossiRossi ---.karneval.cz

Dobrý den všem, URL Rewriting funguje perfektně včetně postbacku, ale přestal fungovat Focus(). Ve WebUserControl (ascx), který je připojen ke stránce obsluhující URL Rewriting, mám několik Textboxů z nichž první by měl mít focus. Toto nastavuji v Page_Load WebUserControlu:

protected void Page_Load(object sender, EventArgs e)

{

txbName.Focus();

}

Pokud použiju URL Rewriting, Focus prostě nefunguje, v opačném připadě není problém. Nedokázal byste někdo poradit? Dík

odpovědětodpovědět Gravatar

Focus() OK

9.10.2008 12:08:109.10.2008 12:08:10 RossiRossi ---.karneval.cz

Tak jsem si na to přišel sám :-D. Na místo Page_Load je potřeba volání metody Focus() umístit do ... chvilka napětí ... Page_PreRender. Přeto ale, nevěděl by někdo proč? Dochází tam snad k nějaké další "okružní" jízdě v životě WebUserControlu? Výše zmíněný textbox je umístěn deklarativně.

odpovědětodpovědět Gravatar

Problém v IIS 7.0

14.10.2008 18:10:0514.10.2008 18:10:05 Adam H.Adam H. ---.net.upc.cz

Ahoj, mám s níže uvedeným příkladem problém pod IIS 7.0 - Vypadne na mě HTTP 404:

Server Error in '/' Application.

--------------------------------------------------------------------------------

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /katalog/auto.aspx

odpovědětodpovědět Gravatar

RE: Problém v IIS 7.0

14.10.2008 22:00:3714.10.2008 22:00:37 Adam H.Adam H. ---.karneval.cz

Pro ty, kteří na toto narazí jako já:

Je potřeba v nastavení webového serveru IIS 7.0 přidat do "Handler Mappings" všechny handlery, které jste pro url rewriting definovali ve web.config.

IIS poté přidá do web.configu na serveru záznamy:

<system.webServer>

<handlers>

<add name="Product" path="produkt/*.aspx" verb="*" type="MyRewriterHandler" resourceType="Unspecified" preCondition="integratedMode" />

<add name="Document" path="dokument/*.aspx" verb="*" type="MyRewriterHandler" resourceType="Unspecified" preCondition="integratedMode" />

<add name="Catalog" path="katalog/*.aspx" verb="*" type="MyRewriterHandler" resourceType="Unspecified" preCondition="integratedMode" />

</handlers>

</system.webServer>

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET