URL Rewrite Modul IIS 7

06 Juni 2011
Heiko Falk

Mit dem URL Rewrite Module für IIS 7 ist es auf einfache Weise möglich, URL Rewrite Regeln anzulegen. Diese können auf globaler Ebene oder auf Website Ebene erstellt werden. Globale Regeln werden in der Datei system32\\inetsrv\\config\\ApplicationHost.config abgelegt, lokale in der Web.Config Datei. Die Pflege kann aber auch über den IIS-Manager erfolgen. Hier findet man hierzu gute Anleitungen.

Nachfolgend möchte ich ein paar Hinweise zu verschiedenen Punkten geben, über die ich beim Erstellen von Regeln gestolpert bin und die ich erst nach einiger Recherche klären konnte.

Hierzu kurz die einzelnen Bestandteile einer URL, auf die zugegriffen werden kann:
http(s)://<host>:<port>/<path>?<querystring>

Übereinstimmung mit URL – Muster (Match URL – Pattern)
Das Muster, welches dazu verwendet wird die eingehende URL zu analysieren, bezieht sich auf <path>, also nicht auf die gesamte URL!

Bedingungen (Conditions)
Die Bedingungen können auf verschiedene Bestandteile der URL zugreifen, hier eine kurze Übersicht:

Auf <querystring> kann über die Servervariable {QUERY_STRING} zugegriffen werden.
Auf <host> kann über die Servervariable {HTTP_HOST} zugegriffen werden.
Auf <port> kann über die Servervariable {SERVER_PORT} zugegriffen werden.
Über die Servervariablen {SERVER_PORT_SECURE} und {HTTPS} kann man entscheiden, ob eine sichere Verbindung verwendet wird.
Über die Servervariable {REQUEST_URI} kann auf den gesamten angefragten URL Pfad: <path> inklusive <querystring> zugegriffen werden.

Punicode
Internationale Domainnamen, welche beispielsweise deutsche Umlaute wie ü, ä, ö verwenden, werden von den Browsern nach Punicode konvertiert. Eine ausführlichere Erklärung zu Punicode findet man hier [http://de.wikipedia.org/wiki/Punycode]
Dadurch kommt beim URL Rewrite Modul beim Aufruf der Seite www.softwareentwicklung-zürich.ch folgender Host-Header an: www.xn--softwareentwicklung-zrich-zwc.ch, wie auch im IIS-Log zu sehen ist:

2011-06-04 09:50:31 W3SVC6 SI-001 212.227.28.211 GET /softwareentwicklung-zuerich.htm - 80 - 188.98.70.57 Mozilla/5.0+(Windows+NT+5.1;+rv:2.0.1)+Gecko/20100101+Firefox/4.0.1 www.xn--softwareentwicklung-zrich-zwc.ch 200 0 0 69

Möchte man also URL Rewrite Regeln erstellen, die sich auf Domainnamen mit deutschen Umlauten beziehen, muss man diese nach Punicode konvertieren. Nachfolgend ein Auszug der Web.config Datei für eine solche Regel:

  1. <rewrite>
  2. <rules>
  3. <rulename="interapWebsiteZürich"enabled="true"stopProcessing="true">
  4. <matchurl="^${body}quot; />"
  5. <conditionslogicalGrouping="MatchAll"trackAllCaptures="false">
  6. <addinput="{HTTP_HOST}"pattern="^www\.xn--softwareentwicklung-zrich-zwc\.ch${body}quot; />"
  7. </conditions>
  8. <actiontype="Rewrite"url="softwareentwicklung-zuerich.htm"logRewrittenUrl="true"/>
  9. </rule>
  10. </rules>
  11. </rewrite>


Einen Online-Konverter für Punicode gibt es hier.