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.