URL-Remapping
Eintrag zuletzt aktualisiert am: 23.09.2006
Die Abbildung einer angefragten
URL auf eine andere (interne)
URL innerhalb des
Webservers nennt man
URL-Rewriting oder
URL-Remapping. Dabei entsteht ein Alias für eine
URL. Es gibt mehrere Gründe dafür, eine
URL auf eine andere
URL abzubilden:
- Für ausgewählte lange URLs sollen kurze URLs definiert werden, die man leichter auch durch direkte Adresseingabe anwählen kann.
- Eine URL hat sich geändert. Man möchte aber, dass (für eine Übergangszeit) die alten URLs noch zum Ziel führen.
- Parametrisierte Webseiten sollen eine Fassade aus „echten“ URLs erhalten, damit die Seiten in Suchmaschinen besser aufgenommen werden.
- Eine URL enthält Zusatzinformationen (z.B. Authentifizierung), die die korrekte Auflösung der URL auf dem Webserver verhindern würden.
In ASP.NET 1.x war
URL-Rewriting nur durch eigenen Programmcode möglich.
ASP.NET 2.0 unterstützt
URL-Rewriting auch in deklarativer Weise in der
web.config-Datei. Dabei können allerdings leider keine regulären Ausdrücke angegeben werden, sodass für jede einzelne Datei eine statische Umleitung definiert werden muss.
<urlMappings enabled="true">
<add url="~/Mitglieder/Login.aspx" mappedUrl="~/Login.aspx" />
<add url="~/Airbus.aspx" mappedUrl="~/Info/Flugzeuge.aspx?Kategorie=Airbus" />
<add url="~/Boeing.aspx" mappedUrl="~/Info/Flugzeuge.aspx?Kategorie=Boeing" />
</urlMappings>
Wenn 1.000 Produktseiten auf eine produkte.aspx abgebildet werden sollen, ist das deklarative
URL-Rewriting kein ädaquates Vorgehen.
Aufgrund der Beschränkungen des deklarativen
URL-Rewriting ist das programmgesteuerte
URL-Rewriting auch in
ASP.NET 2.0 noch eine für viele Anwender relevante Thematik.
ASP.NET unterstützt
URL-Rewriting durch die
Methode RewritePath() in der Klasse
System.Web.HttpContext. Diese
Methode erwartet als ersten Parameter den Namen einer physikalisch existierenden .aspx-Datei.
URL-Parameter, die durch "/" oder "?" an den Dateinamen anzuhängen sind, müssen im zweiten bzw. dritten Parameter der
Methode RewritePath() genannt werden.
RewritePath() hat keine Wirkung, wenn es innerhalb einer .aspx-Seite aufgerufen wird; möchte man innerhalb einer Seite umleiten, muss man Response.Redirect() oder Server.Transfer() verwenden. Der Aufruf von RewritePath() steht üblicherweise in der global.asax in der Ereignisbehandlungsroutine
Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs),
die vor jedem einzelnen Aufruf einer .aspx-Seite von dem
ASP.NET Page Framework angesprochen wird.