IIS 7 und UR Rewriting

Ein URLRewrite wird verwendet um schönere Hyperlinks zu bekommen. Statt artikel.aspx?íd=1212 wird wunderbarerartikel.aspx. Um dies zu erreichen greift man in den Ablauf innerhalb der IIS Pipeline ein und ersetzt den Pfad mittels RewritePath. Das erfolgt per HTTPModul das in die IIS Pipeline per Web.Config eingeklinkt wird. Erst ab IIS 7 gilt ein per managed Code erstelltes Modul für alle Requests. Vorher waren z.B. GIF vom Rewrite ausgenommen, was enorme Probleme im täglichen Leben erzeugte. Um ein Modul im IIS7 zu registrieren muss man den Bereich System.WebServer verwenden.

<system.webServer>
<validation/>
<modules>
    <add type="UrlRewrite" name="blogURLrewriteModule"/>
</modules>

Das Modul selbst ist eine Klasse die das iHttpModule Interface implementieren muss. Wenn man mit einer Website arbeitet kann man diese Klasse in app_code Verzeichnis ablegen.

Dann muss die Methode Application_BeginRequest implementiert werden. In dieser ruft man dann den rewritepath auf.

 Private Sub Application_BeginRequest(ByVal source As Object, ByVal e As EventArgs)
    Dim application As HttpApplication = CType(source, HttpApplication)
    Dim context As HttpContext = application.Context
     Dim OldURL As String = application.Request.Url.ToString().ToLower()
     If (OldURL.IndexOf("suchstring") > -1) Then
         Dim NewURL As String = "tollerurl.aspx"  
         application.Context.RewritePath(NewURL)

Theoretisch kann man seit ASP.NET 2.0 auch per web.config ein Rewrite (hier mapping genannt) durchführen. Dies geht aber nur für statische URL’s und lässt keine Variationen des z.B. Querystrings zu.

 <urlMappings>
      <add url="von.aspx" mappedUrl="zu.aspx"/>
 </urlMappings>

Seit wenigen Tagen hat das IIS7 Team ein rewriter Modul veröffentlicht, das sich per Web.config, auch dynamisch, konfigurieren lässt. Zu finden auf www.iis.net . Ich werde dazu später noch etwas bloggen.

Kommentar schreiben