<-
Apache > HTTP-Server > Dokumentation > Version 2.5 > Rewrite

Wann man mod_rewrite nicht verwenden sollte

Verfügbare Sprachen:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

Dieses Dokument ergänzt die mod_rewrite Referenzdokumentation. Es beschreibt vielleicht eines der wichtigsten Konzepte bezüglich mod_rewrite - nämlich, wann man es vermeiden sollte.

mod_rewrite sollte als letzter Ausweg betrachtet werden, wenn andere Alternativen nicht ausreichen. Die Verwendung, wenn einfachere Alternativen existieren, führt zu Konfigurationen, die verwirrend, fragil und schwer zu warten sind. Das Verständnis der verfügbaren Alternativen ist ein sehr wichtiger Schritt zur Beherrschung von mod_rewrite.

Beachten Sie, dass viele dieser Beispiele nicht unverändert in Ihrer speziellen Serverkonfiguration funktionieren werden. Es ist daher wichtig, dass Sie sie verstehen, anstatt die Beispiele einfach auszuschneiden und in Ihre Konfiguration einzufügen.

Die häufigste Situation, in der mod_rewrite das richtige Werkzeug ist, ist wenn die allerbeste Lösung Zugriff auf die Serverkonfigurationsdateien erfordert und Sie diesen Zugriff nicht haben. Einige Konfigurationsdirektiven sind nur in der Serverkonfigurationsdatei verfügbar. Wenn Sie sich in einer Hosting-Situation befinden, in der Sie nur mit .htaccess-Dateien arbeiten können, müssen Sie möglicherweise auf mod_rewrite zurückgreifen.

Siehe auch

top

Einfache Umleitung

mod_alias stellt die Direktiven Redirect und RedirectMatch bereit, die eine Möglichkeit bieten, eine URL zu einer anderen umzuleiten. Diese Art der einfachen Umleitung einer URL oder einer Klasse von URLs an einen anderen Ort sollte mit diesen Direktiven und nicht mit RewriteRule erfolgen. RedirectMatch ermöglicht es Ihnen, einen regulären Ausdruck in Ihre Umleitungskriterien einzubinden, was viele der Vorteile der Verwendung von RewriteRule bietet.

Eine häufige Verwendung von RewriteRule ist die Umleitung einer ganzen Klasse von URLs. Beispielsweise müssen alle URLs im Verzeichnis /one nach http://one.example.com/ umgeleitet werden, oder alle http-Anfragen müssen nach https umgeleitet werden.

Diese Situationen werden besser mit der Redirect-Direktive behandelt. Denken Sie daran, dass Redirect Pfadinformationen beibehält. Das heißt, eine Umleitung für die URL /one wird auch alle darunter liegenden URLs umleiten, wie /one/two.html und /one/three/four.html.

Um URLs unter /one nach http://one.example.com umzuleiten, tun Sie Folgendes:

Redirect "/one/" "http://one.example.com/"

Um einen Hostnamen zu einem anderen umzuleiten, beispielsweise example.com zu www.example.com, siehe das Rezept für kanonische Hostnamen.

Um http-URLs nach https umzuleiten, tun Sie Folgendes:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL-Konfiguration hier
</VirtualHost>

Die Verwendung von RewriteRule für diese Aufgabe kann angemessen sein, wenn andere RewriteRule-Direktiven im selben Geltungsbereich vorhanden sind. Dies liegt daran, dass bei Redirect- und RewriteRule-Direktiven im selben Geltungsbereich die RewriteRule-Direktiven immer zuerst ausgeführt werden, unabhängig von der Reihenfolge in der Konfigurationsdatei.

Im Fall der http-zu-https-Umleitung wäre die Verwendung von RewriteRule angemessen, wenn Sie keinen Zugriff auf die Hauptserverkonfigurationsdatei haben und diese Aufgabe stattdessen in einer .htaccess-Datei erledigen müssen.

top

URL-Aliasing

Die Alias-Direktive bietet eine Zuordnung von einem URI zu einem Verzeichnis - normalerweise einem Verzeichnis außerhalb Ihres DocumentRoot. Obwohl es möglich ist, diese Zuordnung mit mod_rewrite durchzuführen, ist Alias aus Gründen der Einfachheit und Leistung die bevorzugte Methode.

Verwendung von Alias

Alias "/cats" "/var/www/virtualhosts/felines/htdocs"

Die Verwendung von mod_rewrite für diese Zuordnung kann angemessen sein, wenn Sie keinen Zugriff auf die Serverkonfigurationsdateien haben. Alias kann nur im Server- oder VirtualHost-Kontext verwendet werden und nicht in einer .htaccess-Datei.

Symbolische Links wären eine weitere Möglichkeit, dasselbe zu erreichen, wenn Sie Options FollowSymLinks auf Ihrem Server aktiviert haben.

top

Virtuelles Hosting

Obwohl es möglich ist, virtuelle Hosts mit mod_rewrite zu verwalten, ist dies selten der richtige Weg. Das Erstellen einzelner <VirtualHost>-Blöcke ist fast immer der richtige Ansatz. Falls Sie eine enorme Anzahl virtueller Hosts haben, erwägen Sie die Verwendung von mod_vhost_alias, um diese Hosts automatisch zu erstellen.

Module wie mod_macro sind ebenfalls nützlich, um eine große Anzahl virtueller Hosts dynamisch zu erstellen.

Die Verwendung von mod_rewrite für die Erstellung virtueller Hosts kann angemessen sein, wenn Sie einen Hosting-Dienst verwenden, der Ihnen keinen Zugriff auf die Serverkonfigurationsdateien gewährt und Sie daher auf die Konfiguration mittels .htaccess-Dateien beschränkt sind.

Siehe das Dokument Virtuelle Hosts mit mod_rewrite für weitere Details, wie Sie dies erreichen können, wenn es Ihnen immer noch als der richtige Ansatz erscheint.

top

Einfaches Proxying

RewriteRule bietet das [P]-Flag, um umgeschriebene URIs über mod_proxy weiterzuleiten.

RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]

In vielen Fällen jedoch, wenn kein tatsächlicher Musterabgleich erforderlich ist, wie im obigen Beispiel, ist die ProxyPass-Direktive die bessere Wahl. Das Beispiel hier könnte wie folgt dargestellt werden:

ProxyPass "/images/" "http://imageserver.local/images/"

Beachten Sie, dass Sie unabhängig davon, ob Sie RewriteRule oder ProxyPass verwenden, die ProxyPassReverse-Direktive benötigen, um Umleitungen vom Backend-Server korrekt weiterzuleiten:

ProxyPassReverse "/images/" "http://imageserver.local/images/"

Sie müssen möglicherweise stattdessen RewriteRule verwenden, wenn andere RewriteRules im selben Geltungsbereich aktiv sind, da eine RewriteRule in der Regel vor einem ProxyPass wirksam wird und somit das gewünschte Ergebnis vorwegnehmen kann.

top

Test von Umgebungsvariablen

mod_rewrite wird häufig verwendet, um eine bestimmte Aktion basierend auf dem Vorhandensein oder Fehlen einer bestimmten Umgebungsvariable oder eines Anfrage-Headers durchzuführen. Dies kann effizienter mit der <If>-Direktive erreicht werden.

Betrachten Sie beispielsweise das häufige Szenario, in dem RewriteRule verwendet wird, um einen kanonischen Hostnamen zu erzwingen, wie www.example.com anstelle von example.com. Dies kann mit der <If>-Direktive wie hier gezeigt erreicht werden:

<If "req('Host') != 'www.example.com'">
    Redirect "/" "http://www.example.com/"
</If>

Diese Technik kann verwendet werden, um Aktionen basierend auf jedem beliebigen Anfrage-Header, Antwort-Header oder Umgebungsvariable durchzuführen und mod_rewrite in vielen gängigen Szenarien zu ersetzen.

Siehe insbesondere die Dokumentation zur Ausdrucksauswertung für einen Überblick darüber, welche Arten von Ausdrücken Sie in <If>-Abschnitten und in bestimmten anderen Direktiven verwenden können.

Verfügbare Sprachen:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn