Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

URL Rewriting am IIS

Geschrieben von: Carsten Wawer
Kategorie: Server

This printed page brought to you by AlphaSierraPapa

Für den Apache Webserver gibt es schon seit geraumer Zeit (fast seit Ewigkeiten) ein Modul namens mod_rewrite, das URLs beliebig "Umschreiben" kann. Dies reicht von einfachen Rewrites (vorgaukeln einer statischen Site) bis hin zu komplexen Rewrites die sich regulärer Ausdrücke bedienen. Heute werden wir ein Tool für IIS kennenlernen, das uns genau diese Funktionalität als ISAPI Filter bietet.

Beginnen wir mit einem praktischen Beispiel für URL Rewriting - aus einer Produktdetail-URL mit angehängtem QueryString

http://www.meinserver.de/news/detail.asp?id=28

könnte ein für Suchmaschinen unproblematisches

http://www.meinserver.de/news/detail/28.html

werden. Der Job von mod_rewrite (und seinen IIS Geschwistern) ist es, den URL rückumzuwandeln bevor der Webserver mit der tatsächlichen Bearbeitung beginnt.

URL-Rewrite für den IIS

Es gibt nicht nur für Apache solche Tools, sondern auch für den Internet Information Server gibt es Komponenten um URL-Rewriting zu nutzen. In Form von ISAPI-Filtern konvertieren diese die URLs auf Basis von Regeln und Regular Expressions.

Als Beispiel-Komponente habe ich mich für die Komponente ISAPI_Rewrite entschieden, die den nicht zu unterschätzenden Vorteil hat, in einer leicht eingeschränkten Version kostenlos verfügbar zu sein - dies erleichtert das erste Kennenlernen ungemein.

Installation

Auf der Produktwebsite von ISAPI_Rewrite laden wir uns zuallererst die "LITE-Version" der Komponente herunter. Ob wir die .exe oder oder die .msi-Datei nutzen hängt nur davon ab, ob wir den Windows-Installer 1.1 auf dem Zielserver verfügbar haben. Falls dem so ist, reicht die msi-Datei aus.

Die Installation verläuft recht unspektakulär. Wichtig ist nur zu beachten, daß das Tool den IIS-Admin-Dienst (und alle verknüpften Dienste wie WWW, FTP und SMTP) für die Dauer der Installation abschaltet.

Nach der Installation öffnen wir den Internetdienstmanager und finden innerhalb der ISAPI-Filter eine neue Eintragung: "ISAPI_Rewrite". Die Installation des Paketes wurde vollständig abgeschlossen, nun können wir an die Konfiguration des Filters gehen

Konfiguration

Im Installationsverzeichnis (z.B.: c:\Programme\Helios\ISAPI_REWRITE\) findet sich die entscheidende Datei zur Konfiguration, die Datei httpd.ini.

[ISAPI_Rewrite]

# Defend your computer from some worm attacks
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]

Die oben gezeigte Regel macht die (NT-Administratoren sicherlich bekannten) Zugriffe auf global.asa, default.ida und root.exe unschädlich. Dies trifft aber noch nicht ganz das Ziel unserer Bemühungen, weshalb wir uns mit dieser Zeile nicht länger beschäftigen und uns einer eigenen Regel zuwenden, aber zuerst sehen wir uns an, wie diese definiert sind.

Eine einfache Regel wäre die folgende

RewriteRule /news/detail/(.*).html /news/detail.asp\?id=$1

Diese Regel definiert anhand von Regular Expressions einen Ausdruck, der konvertiert werden soll. Ohne zu tief in die Regular Expressions steigen zu wollen, kann ich sagen, daß der Punkt (.) ein Sonderzeichen ist, das ein beliebiges Zeichen darstellt. Die Kombination mit dem Stern (*) heißt, daß das vorherige Zeichen (in diesem Fall beliebig) auch noch beliebig oft vorkommen darf. Ein klassischer Platzhalter also.

Auf der rechten Seite finden wir die URL, auf die verwiesen wird. Wichtig sind hierbei zwei Dinge zu beachten:

Der Backslash vor dem Fragezeichen ist nötig um das (Zeichen) Fragezeichen vom Sonderzeichen Fragezeichen zu unterscheiden. Der Ausdruck $1 bezieht sich auf den ersten Platzhalter in den Klammern. Es dürfen bis zu neun Platzhalter genutzt werden.

Nun wollen wir uns aber eine etwas komplexere Regel ansehen

RewriteRule /sessionid/(.*)/id/(.*)/action/(.*)/(.*)/(.*).html /$4/$5\.asp\?sessionid=$1&id=$2&action=$3

Was macht dieses "Ungetüm"? Hier habe ich eine allgemeingültige Regel definiert, die mir die Arbeit in einem größeren Projekt erleichtert. Nehmen wir an, die URLs wurden bisher in folgendem Format genutzt:

http://www.meinserver.de/presse/artikel.asp?sessionid=436dg35dsgf&action=read&id=2634

und im gleichen Projekt existieren aber auch URLs wie:

http://www.meinserver.de/termine/termin.asp?sessionid=436dg35dsgf&action=buchung&id=363

Trotzdem kann ich beide mit meiner oben beschriebenen Regel abbilden. Die URLs würden nun

http://www.meinserver.de/sessiondid/436dg35dsgf /id/2634/action/read/presse/artikel.html

oder eben

http://www.meinserver.de/sessiondid/436dg35dsgf /id/363/action/buchung/termine/termin.html

lauten. Die einzelnen Platzhalter können folgendermaßen zugeordnet werden:

RewriteRule /sessionid/(.*)/id/(.*)/action/(.*)/(.*)/(.*).html /$4/$5\.asp\?sessionid=$1&id=$2&action=$3
  1. $1 ist die sessionid
  2. $2 ist die id
  3. $3 ist die action
  4. $4 ist der Pfad
  5. $5 ist der Filename ohne die .asp-Endung

Schlußbemerkung

Dies war ein erster kleiner Einblick in die Arbeit mit ISAPI_Rewrite. Neben der Indizierung von dynamischen Webprojekten durch Suchmaschinen bietet die Nutzung einer solchen Komponente aber auch weitreichende andere Möglichkeiten. Dies geht von einer Client-Browser-basierten Weiterleitung in verschiedene Verzeichnisse bis zu den nicht zu unterschätzenden Sicherheitsaspekten bei der Nutzung eines solchen Filters.

Als Anmerkung sei noch gesagt, daß die frei nutzbare Version von ISAPI_Rewrite die Beschränkung hat, nur eine globale Konfigurationsdatei zu unterstützen. In der Vollversion kann man für jede Website eine eigene Konfiguration anlegen.

This printed page brought to you by AlphaSierraPapa

Links zu anderen Sites

ISAPI_Rewrite
http://www.isapirewrite.com/

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.