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.
Starten Sie den IIS-Manager, und klicken Sie dann auf Standardwebsite.
Klicken Sie im Bereich Aktionen auf Bindungen, und fügen Sie eine neue HTTP-Bindung für Port 8088 hinzu.
Abbildung 1: Hinzufügen einer neuen Bindung
Ö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.
Speichern Sie die Datei hosts.
Überprüfen Sie, ob die Hostnamen korrekt angegeben wurden, indem Sie einen Webbrowser öffnen und die Seiten
http://www_mysite_com/iisstart.htm
undhttp://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:
Starten Sie den IIS-Manager.
Wählen Sie auf der linken Seite im Bereich Verbindungen die Option Standardwebsite.
Klicken Sie auf der rechten Seite in der Featureansicht auf URL-Umschreibung.
Abbildung 2: Klicken Sie auf „URL-Umschreibung“
Klicken Sie auf der rechten Seite im Bereich Aktionen auf Regeln importieren.
Kopieren Sie die obigen „mod_rewrite“-Beispielregeln und fügen Sie sie in das Textfeld Umschreibungsregeln ein.
Abbildung 3: Zu importierende Regeln
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.
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.
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.
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.
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.