| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?> |
| <!-- English Revision: 1933071:1934233 (outdated) --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="avoid.xml.meta"> |
| <parentdocument href="./">Rewrite</parentdocument> |
| |
| <title>Wann man mod_rewrite nicht verwenden sollte</title> |
| |
| <summary> |
| |
| <p>Dieses Dokument ergänzt die <module>mod_rewrite</module> |
| <a href="../mod/mod_rewrite.html">Referenzdokumentation</a>. Es beschreibt |
| vielleicht eines der wichtigsten Konzepte bezüglich <module>mod_rewrite</module> - |
| nämlich, wann man es vermeiden sollte.</p> |
| |
| <p><module>mod_rewrite</module> 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 <module>mod_rewrite</module>.</p> |
| |
| <p>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.</p> |
| |
| <p>Die häufigste Situation, in der <module>mod_rewrite</module> 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 |
| <module>mod_rewrite</module> zurückgreifen.</p> |
| |
| </summary> |
| <seealso><a href="../mod/mod_rewrite.html">Moduldokumentation</a></seealso> |
| <seealso><a href="intro.html">Einführung in mod_rewrite</a></seealso> |
| <seealso><a href="remapping.html">Umleitung und Neuzuordnung</a></seealso> |
| <seealso><a href="access.html">Zugriffskontrolle</a></seealso> |
| <seealso><a href="vhosts.html">Virtuelle Hosts</a></seealso> |
| <seealso><a href="proxy.html">Proxying</a></seealso> |
| <seealso><a href="rewritemap.html">Verwendung von RewriteMap</a></seealso> |
| <seealso><a href="advanced.html">Fortgeschrittene Techniken</a></seealso> |
| <!--<seealso><a href="avoid.html">Wann man mod_rewrite nicht verwenden sollte</a></seealso>--> |
| |
| <section id="redirect"> |
| <title>Einfache Umleitung</title> |
| |
| <p><module>mod_alias</module> stellt die Direktiven <directive |
| module="mod_alias">Redirect</directive> und <directive |
| module="mod_alias">RedirectMatch</directive> 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 <directive |
| module="mod_rewrite">RewriteRule</directive> erfolgen. <code>RedirectMatch</code> |
| ermöglicht es Ihnen, einen regulären Ausdruck in Ihre Umleitungskriterien |
| einzubinden, was viele der Vorteile der Verwendung von |
| <code>RewriteRule</code> bietet.</p> |
| |
| <p>Eine häufige Verwendung von <code>RewriteRule</code> ist die Umleitung |
| einer ganzen Klasse von URLs. Beispielsweise müssen alle URLs im Verzeichnis |
| <code>/one</code> nach <code>http://one.example.com/</code> umgeleitet werden, |
| oder alle <code>http</code>-Anfragen müssen nach <code>https</code> |
| umgeleitet werden.</p> |
| |
| <p>Diese Situationen werden besser mit der <code>Redirect</code>-Direktive |
| behandelt. Denken Sie daran, dass <code>Redirect</code> Pfadinformationen |
| beibehält. Das heißt, eine Umleitung für die URL <code>/one</code> |
| wird auch alle darunter liegenden URLs umleiten, wie |
| <code>/one/two.html</code> und <code>/one/three/four.html</code>.</p> |
| |
| <p>Um URLs unter <code>/one</code> nach |
| <code>http://one.example.com</code> umzuleiten, tun Sie Folgendes:</p> |
| |
| <highlight language="config"> |
| Redirect "/one/" "http://one.example.com/" |
| </highlight> |
| |
| <p>Um einen Hostnamen zu einem anderen umzuleiten, beispielsweise |
| <code>example.com</code> zu <code>www.example.com</code>, siehe das |
| Rezept für <a href="remapping.html#canonicalhost">kanonische Hostnamen</a>.</p> |
| |
| <p>Um <code>http</code>-URLs nach <code>https</code> umzuleiten, tun Sie |
| Folgendes:</p> |
| |
| <highlight language="config"> |
| <VirtualHost *:80> |
| ServerName www.example.com |
| Redirect "/" "https://www.example.com/" |
| </VirtualHost> |
| |
| <VirtualHost *:443> |
| ServerName www.example.com |
| # ... SSL-Konfiguration hier |
| </VirtualHost> |
| </highlight> |
| |
| <p>Die Verwendung von <code>RewriteRule</code> für diese Aufgabe kann |
| angemessen sein, wenn andere <code>RewriteRule</code>-Direktiven im |
| selben Geltungsbereich vorhanden sind. Dies liegt daran, dass bei |
| <code>Redirect</code>- und <code>RewriteRule</code>-Direktiven im selben |
| Geltungsbereich die <code>RewriteRule</code>-Direktiven immer zuerst |
| ausgeführt werden, unabhängig von der Reihenfolge in der |
| Konfigurationsdatei.</p> |
| |
| <p>Im Fall der <em>http-zu-https</em>-Umleitung wäre die Verwendung |
| von <code>RewriteRule</code> angemessen, wenn Sie keinen Zugriff auf die |
| Hauptserverkonfigurationsdatei haben und diese Aufgabe stattdessen in einer |
| <code>.htaccess</code>-Datei erledigen müssen.</p> |
| |
| </section> |
| |
| <section id="alias"><title>URL-Aliasing</title> |
| <p>Die <directive module="mod_alias">Alias</directive>-Direktive bietet |
| eine Zuordnung von einem URI zu einem Verzeichnis - normalerweise einem |
| Verzeichnis außerhalb Ihres <directive module="core">DocumentRoot</directive>. |
| Obwohl es möglich ist, diese Zuordnung mit <module>mod_rewrite</module> |
| durchzuführen, ist <directive module="mod_alias">Alias</directive> aus Gründen |
| der Einfachheit und Leistung die bevorzugte Methode.</p> |
| |
| <example><title>Verwendung von Alias</title> |
| <highlight language="config"> |
| Alias "/cats" "/var/www/virtualhosts/felines/htdocs" |
| </highlight> |
| </example> |
| |
| <p> |
| Die Verwendung von <module>mod_rewrite</module> 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 <code>.htaccess</code>-Datei. |
| </p> |
| |
| <p>Symbolische Links wären eine weitere Möglichkeit, dasselbe zu erreichen, |
| wenn Sie <code>Options FollowSymLinks</code> auf Ihrem Server aktiviert |
| haben.</p> |
| </section> |
| |
| <section id="vhosts"><title>Virtuelles Hosting</title> |
| <p>Obwohl es möglich ist, <a href="vhosts.html">virtuelle Hosts |
| mit mod_rewrite</a> zu verwalten, ist dies selten der richtige Weg. Das |
| Erstellen einzelner <directive module="core" type="section">VirtualHost</directive>-Blöcke |
| ist fast immer der richtige Ansatz. Falls Sie eine enorme Anzahl virtueller |
| Hosts haben, erwägen Sie die Verwendung von |
| <module>mod_vhost_alias</module>, um diese Hosts automatisch zu erstellen.</p> |
| |
| <p>Module wie <module>mod_macro</module> sind ebenfalls nützlich, um eine |
| große Anzahl virtueller Hosts dynamisch zu erstellen.</p> |
| |
| <p>Die Verwendung von <module>mod_rewrite</module> 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 |
| <code>.htaccess</code>-Dateien beschränkt sind.</p> |
| |
| <p>Siehe das Dokument <a href="vhosts.html">Virtuelle Hosts mit mod_rewrite</a> |
| für weitere Details, wie Sie dies erreichen können, wenn es Ihnen immer |
| noch als der richtige Ansatz erscheint.</p> |
| |
| </section> |
| |
| <section id="proxy"><title>Einfaches Proxying</title> |
| |
| <p><directive module="mod_rewrite">RewriteRule</directive> bietet das <a |
| href="flags.html#flag_p">[P]</a>-Flag, um umgeschriebene URIs über |
| <module>mod_proxy</module> weiterzuleiten.</p> |
| |
| <highlight language="config"> |
| RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P] |
| </highlight> |
| |
| <p>In vielen Fällen jedoch, wenn kein tatsächlicher Musterabgleich |
| erforderlich ist, wie im obigen Beispiel, ist die <directive |
| module="mod_proxy">ProxyPass</directive>-Direktive die bessere Wahl. |
| Das Beispiel hier könnte wie folgt dargestellt werden:</p> |
| |
| <highlight language="config"> |
| ProxyPass "/images/" "http://imageserver.local/images/" |
| </highlight> |
| |
| <p>Beachten Sie, dass Sie unabhängig davon, ob Sie <directive |
| module="mod_rewrite">RewriteRule</directive> oder <directive |
| module="mod_proxy">ProxyPass</directive> verwenden, die |
| <directive module="mod_proxy">ProxyPassReverse</directive>-Direktive |
| benötigen, um Umleitungen vom Backend-Server korrekt weiterzuleiten:</p> |
| |
| <highlight language="config"> |
| ProxyPassReverse "/images/" "http://imageserver.local/images/" |
| </highlight> |
| |
| <p>Sie müssen möglicherweise stattdessen <code>RewriteRule</code> verwenden, |
| wenn andere <code>RewriteRule</code>s im selben Geltungsbereich aktiv sind, |
| da eine <code>RewriteRule</code> in der Regel vor einem |
| <code>ProxyPass</code> wirksam wird und somit das gewünschte Ergebnis |
| vorwegnehmen kann.</p> |
| |
| </section> |
| |
| <section id="setenv"><title>Test von Umgebungsvariablen</title> |
| |
| <p><module>mod_rewrite</module> 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 <directive module="core" type="section">If</directive>-Direktive |
| erreicht werden.</p> |
| |
| <p>Betrachten Sie beispielsweise das häufige Szenario, in dem |
| <directive>RewriteRule</directive> verwendet wird, um einen kanonischen |
| Hostnamen zu erzwingen, wie <code>www.example.com</code> anstelle von |
| <code>example.com</code>. Dies kann mit der <directive |
| module="core" type="section">If</directive>-Direktive wie hier gezeigt |
| erreicht werden:</p> |
| |
| <highlight language="config"> |
| <If "req('Host') != 'www.example.com'"> |
| Redirect "/" "http://www.example.com/" |
| </If> |
| </highlight> |
| |
| <p>Diese Technik kann verwendet werden, um Aktionen basierend auf jedem |
| beliebigen Anfrage-Header, Antwort-Header oder Umgebungsvariable |
| durchzuführen und <module>mod_rewrite</module> in vielen gängigen |
| Szenarien zu ersetzen.</p> |
| |
| <p>Siehe insbesondere die <a href="../expr.html">Dokumentation zur |
| Ausdrucksauswertung</a> für einen Überblick darüber, welche Arten von |
| Ausdrücken Sie in <directive module="core" type="section">If</directive>-Abschnitten |
| und in bestimmten anderen Direktiven verwenden können.</p> |
| |
| </section> |
| |
| </manualpage> |