Importieren von Apache-mod_rewrite-Regeln

von Ruslan Yakushev

Einführung

Das URL-Rewrite-Modul in IIS 7 und höher unterstützt ein Importfeature, das die Konvertierung von Apache-mod_rewrite-Regeln in IIS-URL-Umschreibungsregeln erheblich vereinfacht. In dieser exemplarischen Vorgehensweise verwenden Sie das Feature „Regeln importieren“, das im URL-Rewrite-Modul bereitgestellt wird, um mehrere „mod_rewrite“-Regeln in eine IIS-Konfigurationsdatei zu importieren. Wenn Sie das URL-Rewrite-Modul noch nicht heruntergeladen haben, können Sie dies unter https://www.iis.net/downloads/microsoft/url-rewrite nachholen.

Einrichten eines Beispielszenarios

Um zu erfahren, wie „mod_rewrite“-Regeln konvertiert werden und wie Sie überprüfen können, ob die konvertierten Regeln korrekt funktionieren, werden Sie das bekannte Szenario zur Erzwingung kanonischer Hostnamen für eine Website implementieren. In diesem Beispiel wird die Verwendung von www.mysite.com anstelle von mysite.com erzwungen, sodass Sie eine Anforderung, die einen anderen Hostnamen als www.mysite.com verwendet, auf einen kanonischen Hostnamen umleiten können.

  1. Starten Sie den IIS-Manager, und klicken Sie dann auf Standardwebsite.

  2. Klicken Sie im Bereich Aktionen auf Bindungen, und fügen Sie eine neue HTTP-Bindung für Port 8088 hinzu.

    Screenshot des Dialogfelds Abbildung 1: Hinzufügen einer neuen Bindung

  3. Öffnen Sie mit Notepad die Datei %SystemDrive%\windows\system32\drivers\etc\hosts und fügen Sie die beiden folgenden Zeilen am Ende ein:

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    Beachten Sie, dass als Domänentrennzeichen „_“ anstelle von „.“ verwendet wird. Damit soll verhindert werden, dass der Webbrowser versucht, den Domänennamen über einen DNS-Server (Domain Name System) aufzulösen.

  4. Speichern Sie die Datei hosts.

  5. Überprüfen Sie, ob die Hostnamen korrekt angegeben wurden, indem Sie einen Webbrowser öffnen und die Seiten http://www_mysite_com/iisstart.htm und http://mysite_com/iisstart.htm aufrufen.

Konvertieren von „mod_rewrite“-Regeln

Die Apache-mod_rewrite-Regeln zur Erzwingung kanonischer Hostnamen lauten:

#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]

#And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www_mysite_com/$1 [L,R]

So konvertieren Sie diese Regeln in das IIS-URL-Umschreibungsformat:

  1. Starten Sie den IIS-Manager.

  2. Wählen Sie auf der linken Seite im Bereich Verbindungen die Option Standardwebsite.

  3. Klicken Sie auf der rechten Seite in der Featureansicht auf URL-Umschreibung.

    Screenshot des Standardmäßigen Homepagebereichs mit ausgewählter Option

    Abbildung 2: Klicken Sie auf „URL-Umschreibung“

  4. Klicken Sie auf der rechten Seite im Bereich Aktionen auf Regeln importieren.

  5. Kopieren Sie die obigen „mod_rewrite“-Beispielregeln und fügen Sie sie in das Textfeld Umschreibungsregeln ein.

    Screenshot des Bereichs

    Abbildung 3: Zu importierende Regeln

  6. Auf der Registerkarte Strukturansicht im Dialogfeld Konvertierte Regeln wird das Ergebnis der Konvertierung sofort angezeigt. Sie können auch auf die Registerkarte XML-Ansicht klicken, um zu sehen, wie die Regeln in der Datei „Web.config“ gespeichert werden.

    Screenshot der Umschaltung zwischen Strukturansicht und X M L-Ansicht im Abschnitt

    Abbildung 4: Konvertierte Regeln

    Wenn Sie zurück zur Strukturansicht wechseln und dort einen Knoten auswählen, wird die entsprechende „mod_rewrite“-Regeldirektive im Textfeld Umschreibungsregeln hervorgehoben.

    Screenshot eines ausgewählten Knotens in der Strukturansicht der konvertierten Regeln.

    Abbildung 5: Struktursicht

    Beachten Sie, dass den Regeln bei der Regelkonvertierung Standardnamen zugewiesen wurden. Um die Standardnamen in einen aussagekräftigeren Namen zu ändern, wählen Sie eine Regel in der Strukturansicht aus, klicken Sie mit der rechten Maustaste darauf, und wählen Sie im Kontextmenü die Option Umbenennen aus.

    Screenshot des Rechtsklicks auf eine konvertierte Regel, um die Regel umzubenennen.

    Abbildung 6: Umbenennen

    Ändern Sie den Namen der ersten Regel von ImportedRule1 in Umleitung zu www_mysite_com:non-80. Ändern Sie den Namen der zweiten Regel von ImportedRule2 in Umleitung zu www_mysite_com:80.

    Klicken Sie im Bereich Aktionen auf Übernehmen, um die konvertierten Regeln in der Datei „Web.config“ zu speichern, und klicken Sie dann auf Zurück zu Regeln.

    Screenshot des Bereichs

    Abbildung 7: Zurück zu Regeln

Testen der konvertierten Regeln

Um zu testen, ob die aus dem „mod_rewrite“-Format importierten Regeln ordnungsgemäß funktionieren, öffnen Sie einen Webbrowser und rufen Sie eine der folgenden URLs auf:

  • http://localhost/iisstart.htm
  • http://mysite_com/iisstart.htm

In beiden Fällen wird der Webbrowser auf http://www_mysite_com/iisstart.htm umgeleitet.

Und wenn Sie eine der folgenden URLs ausprobieren:

  • http://localhost:8088/iisstart.htm
  • http://mysite_com:8088/iisstart.htm

wird der Webbrowser auf http://www_mysite_com:8088/iisstart.htm umgeleitet.

Die aus „mod_rewrite“ importierten Regeln haben die Verwendung kanonischer Hostnamen für eine Website erzwungen. Eine Bing-Suche liefert weitere Beispiele für Apache-mod_rewrite-Regeln.

Haftungsausschluss

WICHTIG : Das URL-Rewrite-Modul versucht, Apache-mod_rewrite-Regeln in funktionell gleichwertige IIS-URL-Umschreibungsregeln zu konvertieren. Aufgrund von Architekturunterschieden zwischen Apache und IIS können jedoch nicht alle „mod_rewrite“-Regeln konvertiert werden. Sie sollten sich unbedingt mit einem „mod_rewrite“-Regelsatz und seiner Funktionalität vertraut machen, bevor Sie mit dem Konvertierungsprozess beginnen. Nach der Konvertierung in IIS-URL-Umschreibungsregeln sollten Sie das Ergebnis der Konvertierung überprüfen und testen, um sicherzustellen, dass der entsprechende IIS-Umschreibungsregelsatz die gleiche URL-Umschreibungslogik bietet.

Beachten Sie, dass nur Regeln, die der Apache-mod_rewrite-Syntax folgen, konvertiert werden können. Alle anderen Formate von Umschreibungsregeln (z. B. ISAPI_Rewrite, Ionic ISAPI Rewrite, IISRewrite und andere) werden nicht erkannt oder falsch konvertiert.