| <?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: 1933068:1939369 (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="remapping.xml.meta"> | |
| <parentdocument href="./">Rewrite</parentdocument> | |
| <title>Umleitung und Neuzuordnung mit mod_rewrite</title> | |
| <summary> | |
| <p>Dieses Dokument ergänzt die <module>mod_rewrite</module> | |
| <a href="../mod/mod_rewrite.html">Referenzdokumentation</a>. Es beschreibt, | |
| wie Sie <module>mod_rewrite</module> verwenden können, um Anfragen | |
| umzuleiten und neu zuzuordnen. Dies beinhaltet viele Beispiele für gängige | |
| Verwendungen von <module>mod_rewrite</module>, einschließlich detaillierter | |
| Beschreibungen, wie jedes einzelne funktioniert.</p> | |
| <note type="warning">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.</note> | |
| </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="old-to-new"> | |
| <title>Von Alt zu Neu (intern)</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Angenommen, wir haben kürzlich die Seite | |
| <code>foo.html</code> in <code>bar.html</code> umbenannt und | |
| möchten nun die alte URL aus Gründen der Abwärtskompatibilität | |
| weiterhin bereitstellen. Dabei sollen die Benutzer der alten URL | |
| jedoch nicht bemerken, dass die Seite umbenannt wurde - das heißt, | |
| die Adresse soll sich in ihrem Browser nicht ändern.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Wir schreiben die alte URL intern auf die neue um, mit der | |
| folgenden Regel:</p> | |
| <highlight language="config"> | |
| RewriteEngine on | |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>/bar</strong>.html" [PT] | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="old-to-new-extern"> | |
| <title>Umschreiben von Alt zu Neu (extern)</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Angenommen erneut, dass wir kürzlich die Seite | |
| <code>foo.html</code> in <code>bar.html</code> umbenannt haben und | |
| nun die alte URL aus Gründen der Abwärtskompatibilität weiterhin | |
| bereitstellen möchten. Diesmal möchten wir aber, dass die Benutzer | |
| der alten URL auf die neue hingewiesen werden, d.h. die | |
| Adresszeile ihres Browsers soll sich ebenfalls ändern.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Wir erzwingen eine HTTP-Umleitung auf die neue URL, was zu einer | |
| Änderung der Browser-Adresszeile und damit der Ansicht der Benutzer | |
| führt:</p> | |
| <highlight language="config"> | |
| RewriteEngine on | |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>bar</strong>.html" [<strong>R</strong>] | |
| </highlight> | |
| </dd> | |
| <dt>Diskussion</dt> | |
| <dd> | |
| <p>In diesem Beispiel können wir im Gegensatz zum | |
| <a href="#old-to-new-intern">internen</a> Beispiel oben einfach die | |
| Redirect-Direktive verwenden. <module>mod_rewrite</module> wurde in | |
| diesem früheren Beispiel verwendet, um die Umleitung vor dem Client | |
| zu verbergen:</p> | |
| <highlight language="config"> | |
| Redirect "/foo.html" "/bar.html" | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="movehomedirs"> | |
| <title>Ressource auf einen anderen Server verschoben</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Wenn eine Ressource auf einen anderen Server verschoben wurde, | |
| möchten Sie möglicherweise, dass URLs für eine gewisse Zeit weiterhin | |
| auf dem alten Server funktionieren, während die Benutzer ihre | |
| Lesezeichen aktualisieren.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Sie können <module>mod_rewrite</module> verwenden, um diese URLs | |
| auf den neuen Server umzuleiten, aber Sie könnten auch die Redirect- | |
| oder RedirectMatch-Direktive in Betracht ziehen.</p> | |
| <highlight language="config"> | |
| #Mit mod_rewrite | |
| RewriteEngine on | |
| RewriteRule "^/docs/(.+)" "http://new.example.com/docs/$1" [R,L] | |
| </highlight> | |
| <highlight language="config"> | |
| #Mit RedirectMatch | |
| RedirectMatch "^/docs/(.*)" "http://new.example.com/docs/$1" | |
| </highlight> | |
| <highlight language="config"> | |
| #Mit Redirect | |
| Redirect "/docs/" "http://new.example.com/docs/" | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="static-to-dynamic"> | |
| <title>Von statisch zu dynamisch</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Wie können wir eine statische Seite | |
| <code>foo.html</code> nahtlos in eine dynamische Variante | |
| <code>foo.cgi</code> umwandeln, d.h. ohne dass der | |
| Browser/Benutzer es bemerkt?</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Wir schreiben die URL einfach auf das CGI-Skript um und | |
| erzwingen, dass der Handler <strong>cgi-script</strong> ist, | |
| damit es als CGI-Programm ausgeführt wird. So führt eine Anfrage | |
| an <code>/~quux/foo.html</code> intern zum Aufruf von | |
| <code>/~quux/foo.cgi</code>.</p> | |
| <highlight language="config"> | |
| RewriteEngine on | |
| RewriteBase "/~quux/" | |
| RewriteRule "^foo\.html$" "foo.cgi" [H=<strong>cgi-script</strong>] | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="backward-compatibility"> | |
| <title>Abwärtskompatibilität bei Änderung der Dateiendung</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Wie können wir URLs abwärtskompatibel machen (virtuell weiterhin | |
| existierend), nachdem <code>document.YYYY</code> zu | |
| <code>document.XXXX</code> migriert wurde, z.B. nach der Konvertierung | |
| einer Reihe von <code>.html</code>-Dateien nach <code>.php</code>?</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Die URL wird nur dann von der alten auf die neue Endung | |
| umgeschrieben, wenn die Zieldatei mit der neuen Endung existiert | |
| und die Originaldatei mit der alten Endung nicht existiert. | |
| Andernfalls bleibt die URL unverändert.</p> | |
| <highlight language="config"> | |
| # Abwärtskompatibilitäts-Regelsatz für | |
| # Umschreibung von document.html zu document.php | |
| # wenn und nur wenn document.php existiert | |
| <Directory "/var/www/htdocs"> | |
| RewriteEngine on | |
| RewriteBase "/var/www/htdocs" | |
| RewriteCond "$1.php" -f | |
| RewriteCond "$1.html" !-f | |
| RewriteRule "^(.*).html$" "$1.php" | |
| </Directory> | |
| </highlight> | |
| </dd> | |
| <dt>Diskussion</dt> | |
| <dd> | |
| <p>Dieses Beispiel nutzt eine oft übersehene Funktion von | |
| <module>mod_rewrite</module>, indem es die Ausführungsreihenfolge des | |
| Regelsatzes ausnutzt. Insbesondere wertet <module>mod_rewrite</module> | |
| die linke Seite der RewriteRule aus, bevor es die | |
| RewriteCond-Direktiven auswertet. Folglich ist $1 bereits definiert, | |
| wenn die RewriteCond-Direktiven ausgewertet werden. Dies ermöglicht | |
| es uns, die Existenz der Original- (<code>document.html</code>) und | |
| Zieldatei (<code>document.php</code>) unter Verwendung desselben | |
| Basisdateinamens zu prüfen.</p> | |
| <p>Dieser Regelsatz ist für die Verwendung im Verzeichniskontext | |
| (in einem <Directory>-Block oder in einer .htaccess-Datei) | |
| konzipiert, sodass die <code>-f</code>-Prüfungen im korrekten | |
| Verzeichnispfad suchen. Möglicherweise müssen Sie eine <directive | |
| module="mod_rewrite">RewriteBase</directive>-Direktive setzen, um das | |
| Verzeichnis anzugeben, in dem Sie arbeiten.</p> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="canonicalhost"> | |
| <title>Kanonische Hostnamen</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd>Das Ziel dieser Regel ist es, die Verwendung eines bestimmten | |
| Hostnamens zu erzwingen, anstelle anderer Hostnamen, die für den | |
| Zugriff auf dieselbe Website verwendet werden könnten. Wenn Sie | |
| beispielsweise die Verwendung von <strong>www.example.com</strong> | |
| anstelle von <strong>example.com</strong> erzwingen möchten, | |
| können Sie eine Variante des folgenden Rezepts verwenden.</dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Der allerbeste Weg, dies zu lösen, verwendet gar nicht <module>mod_rewrite</module>, | |
| sondern die <directive module="mod_alias">Redirect</directive>-Direktive | |
| in einem virtuellen Host für den nicht-kanonischen Hostnamen.</p> | |
| <highlight language="config"> | |
| <VirtualHost *:80> | |
| ServerName undesired.example.com | |
| ServerAlias example.com notthis.example.com | |
| Redirect "/" "http://www.example.com/" | |
| </VirtualHost> | |
| <VirtualHost *:80> | |
| ServerName www.example.com | |
| </VirtualHost> | |
| </highlight> | |
| <p>Alternativ können Sie dies mit der | |
| <directive module="core" type="section">If</directive>-Direktive | |
| erreichen: (<strong>ab Version 2.4</strong>)</p> | |
| <highlight language="config"> | |
| <If "%{HTTP_HOST} != 'www.example.com'"> | |
| Redirect "/" "http://www.example.com/" | |
| </If> | |
| </highlight> | |
| <p>Oder, um beispielsweise einen Teil Ihrer Website auf HTTPS umzuleiten, | |
| könnten Sie Folgendes tun:</p> | |
| <highlight language="config"> | |
| <If "%{SERVER_PROTOCOL} != 'HTTPS'"> | |
| Redirect "/admin/" "https://www.example.com/admin/" | |
| </If> | |
| </highlight> | |
| <p>Wenn Sie aus irgendeinem Grund dennoch <module>mod_rewrite</module> | |
| verwenden möchten - zum Beispiel, wenn Sie dies mit einer größeren Menge | |
| von RewriteRules benötigen - können Sie eines der folgenden Rezepte | |
| verwenden.</p> | |
| <p>Für Websites, die auf einem anderen Port als 80 laufen:</p> | |
| <highlight language="config"> | |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] | |
| RewriteCond "%{HTTP_HOST}" "!^$" | |
| RewriteCond "%{SERVER_PORT}" "!^80$" | |
| RewriteRule "^/?(.*)" "http://www.example.com:%{SERVER_PORT}/$1" [L,R,NE] | |
| </highlight> | |
| <p>Und für eine Website auf Port 80:</p> | |
| <highlight language="config"> | |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] | |
| RewriteCond "%{HTTP_HOST}" "!^$" | |
| RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE] | |
| </highlight> | |
| <p> | |
| Wenn Sie dies generisch für alle Domainnamen tun möchten - das | |
| heißt, wenn Sie <strong>example.com</strong> für alle möglichen | |
| Werte von <strong>example.com</strong> auf | |
| <strong>www.example.com</strong> umleiten möchten, können Sie | |
| das folgende Rezept verwenden:</p> | |
| <highlight language="config"> | |
| RewriteCond "%{HTTP_HOST}" "!^www\." [NC] | |
| RewriteCond "%{HTTP_HOST}" "!^$" | |
| RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE] | |
| </highlight> | |
| <p>Diese Regelsätze funktionieren sowohl in Ihrer | |
| Hauptserverkonfigurationsdatei als auch in einer <code>.htaccess</code>-Datei, | |
| die im <directive module="core">DocumentRoot</directive> des Servers | |
| abgelegt wird.</p> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="multipledirs"> | |
| <title>Suche nach Seiten in mehr als einem Verzeichnis</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Eine bestimmte Ressource könnte an einem von mehreren Orten | |
| existieren, und wir möchten an diesen Orten nach der Ressource | |
| suchen, wenn sie angefordert wird. Vielleicht haben wir kürzlich | |
| unsere Verzeichnisstruktur umorganisiert und Inhalte auf mehrere | |
| Orte verteilt.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Der folgende Regelsatz sucht in zwei Verzeichnissen nach der | |
| Ressource und versucht, falls sie an keinem der beiden Orte | |
| gefunden wird, sie einfach vom angeforderten Ort auszuliefern.</p> | |
| <highlight language="config"> | |
| RewriteEngine on | |
| # zuerst versuchen, es in dir1/ zu finden... | |
| # ...und wenn gefunden, anhalten und zufrieden sein: | |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI}" -f | |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir1</strong>/$1" [L] | |
| # dann versuchen, es in dir2/ zu finden... | |
| # ...und wenn gefunden, anhalten und zufrieden sein: | |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI}" -f | |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir2</strong>/$1" [L] | |
| # sonst weiter zu anderen Alias- oder ScriptAlias-Direktiven usw. | |
| RewriteRule "^" "-" [PT] | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="archive-access-multiplexer"> | |
| <title>Umleitung auf geografisch verteilte Server</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Wir haben zahlreiche Spiegelserver unserer Website und möchten | |
| Besucher auf denjenigen umleiten, der sich in dem Land befindet, in | |
| dem sie sich aufhalten.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Anhand des Hostnamens des anfragenden Clients bestimmen wir, aus | |
| welchem Land er kommt. Wenn wir keine Auflösung seiner IP-Adresse | |
| durchführen können, greifen wir auf einen Standardserver zurück.</p> | |
| <p>Wir verwenden eine <directive module="mod_rewrite">RewriteMap</directive>-Direktive, | |
| um eine Liste der gewünschten Server zu erstellen.</p> | |
| <highlight language="config"> | |
| HostnameLookups on | |
| RewriteEngine on | |
| RewriteMap multiplex "txt:/path/to/map.mirrors" | |
| RewriteCond "%{REMOTE_HOST}" "([a-z]+)$" [NC] | |
| RewriteRule "^/(.*)$" "${multiplex:<strong>%1</strong>|http://www.example.com/}$1" [R,L] | |
| </highlight> | |
| <example> | |
| ## map.mirrors -- Multiplexing-Map<br /> | |
| <br /> | |
| de http://www.example.de/<br /> | |
| uk http://www.example.uk/<br /> | |
| com http://www.example.com/<br /> | |
| ##EOF## | |
| </example> | |
| </dd> | |
| <dt>Diskussion</dt> | |
| <dd> | |
| <note type="warning">Dieser Regelsatz setzt voraus, dass | |
| <directive module="core">HostNameLookups</directive> auf <code>on</code> | |
| gesetzt ist, was einen erheblichen Leistungseinbruch bedeuten kann.</note> | |
| <p>Die <directive module="mod_rewrite">RewriteCond</directive>-Direktive | |
| erfasst den letzten Teil des Hostnamens des anfragenden Clients - den | |
| Ländercode - und die nachfolgende RewriteRule verwendet diesen Wert, | |
| um den entsprechenden Spiegelhost in der Map-Datei nachzuschlagen.</p> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="canonicalurl"> | |
| <title>Kanonische URLs</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Auf manchen Webservern gibt es mehr als eine URL für eine | |
| Ressource. Normalerweise gibt es kanonische URLs (die tatsächlich | |
| verwendet und verteilt werden) und solche, die nur Abkürzungen, | |
| interne Adressen usw. sind. Unabhängig davon, welche URL der | |
| Benutzer mit der Anfrage angegeben hat, sollte er schließlich die | |
| kanonische URL in der Adresszeile seines Browsers sehen.</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Wir führen eine externe HTTP-Umleitung für alle nicht-kanonischen | |
| URLs durch, um sie in der Adressanzeige des Browsers und für alle | |
| nachfolgenden Anfragen zu korrigieren. Im folgenden Beispiel-Regelsatz | |
| ersetzen wir <code>/puppies</code> und <code>/canines</code> | |
| durch die kanonische URL <code>/dogs</code>.</p> | |
| <highlight language="config"> | |
| RewriteRule "^/(puppies|canines)/(.*)" "/dogs/$2" [R] | |
| </highlight> | |
| </dd> | |
| <dt>Diskussion:</dt> | |
| <dd> | |
| Dies sollte eigentlich mit Redirect- oder RedirectMatch-Direktiven | |
| erreicht werden: | |
| <highlight language="config"> | |
| RedirectMatch "^/(puppies|canines)/(.*)" "/dogs/$2" | |
| </highlight> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="moveddocroot"> | |
| <title>Verschobenes <code>DocumentRoot</code></title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Normalerweise entspricht das <directive module="core">DocumentRoot</directive> | |
| des Webservers direkt der URL "<code>/</code>". Aber oft sind diese Daten | |
| nicht wirklich von höchster Priorität. Beispielsweise möchten Sie | |
| vielleicht, dass Besucher beim ersten Betreten einer Website in ein | |
| bestimmtes Unterverzeichnis <code>/about/</code> geleitet werden. Dies | |
| kann mit dem folgenden Regelsatz erreicht werden:</p> | |
| </dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Wir leiten die URL <code>/</code> nach | |
| <code>/about/</code> um: | |
| </p> | |
| <highlight language="config"> | |
| RewriteEngine on | |
| RewriteRule "^/$" "/about/" [<strong>R</strong>] | |
| </highlight> | |
| <p>Beachten Sie, dass dies auch mit der <directive | |
| module="mod_alias">RedirectMatch</directive>-Direktive gehandhabt werden | |
| kann:</p> | |
| <highlight language="config"> | |
| RedirectMatch "^/$" "http://example.com/about/" | |
| </highlight> | |
| <p>Beachten Sie auch, dass das Beispiel nur die Stamm-URL umschreibt. | |
| Das heißt, es schreibt eine Anfrage für <code>http://example.com/</code> | |
| um, aber nicht eine Anfrage für <code>http://example.com/page.html</code>. | |
| Wenn Sie tatsächlich Ihr Document Root geändert haben - das heißt, wenn | |
| <strong>alle</strong> Ihre Inhalte tatsächlich in diesem Unterverzeichnis | |
| liegen - ist es wesentlich besser, einfach Ihre | |
| <directive module="core">DocumentRoot</directive>-Direktive zu ändern | |
| oder alle Inhalte ein Verzeichnis nach oben zu verschieben, anstatt URLs | |
| umzuschreiben.</p> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="fallback-resource"> | |
| <title>Fallback-Ressource</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd>Sie möchten, dass eine einzelne Ressource (beispielsweise eine bestimmte | |
| Datei wie index.php) alle Anfragen behandelt, die an ein bestimmtes | |
| Verzeichnis gerichtet sind, mit Ausnahme derjenigen, die an eine vorhandene | |
| Ressource wie ein Bild oder eine CSS-Datei gehen sollen.</dd> | |
| <dt>Lösung:</dt> | |
| <dd> | |
| <p>Ab Version 2.2.16 sollten Sie hierfür die <directive | |
| module="mod_dir">FallbackResource</directive>-Direktive verwenden:</p> | |
| <highlight language="config"> | |
| <Directory "/var/www/my_blog"> | |
| FallbackResource index.php | |
| </Directory> | |
| </highlight> | |
| <p>In älteren Versionen von Apache oder wenn Ihre Anforderungen | |
| komplizierter sind, können Sie eine Variante des folgenden | |
| Umschreibungssatzes verwenden, um dasselbe zu erreichen:</p> | |
| <highlight language="config"> | |
| <Directory "/var/www/my_blog"> | |
| RewriteBase "/my_blog" | |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f | |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d | |
| RewriteRule "^" "index.php" [PT] | |
| </Directory> | |
| </highlight> | |
| <p>Wenn Sie andererseits die angeforderte URI als Query-String-Argument | |
| an index.php übergeben möchten, können Sie diese RewriteRule ersetzen | |
| durch:</p> | |
| <highlight language="config"> | |
| RewriteRule "(.*)" "index.php?$1" [PT,QSA] | |
| </highlight> | |
| <p>Beachten Sie, dass diese Regelsätze sowohl in einer | |
| <code>.htaccess</code>-Datei als auch in einem <Directory>-Block | |
| verwendet werden können.</p> | |
| </dd> | |
| </dl> | |
| </section> | |
| <section id="rewrite-query"> | |
| <title>Query-String umschreiben</title> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd>Sie möchten einen bestimmten Wert aus einem Query-String erfassen | |
| und ihn entweder ersetzen oder in eine andere Komponente der URL | |
| einbinden.</dd> | |
| <dt>Lösungen:</dt> | |
| <dd> | |
| <p>Viele der Lösungen in diesem Abschnitt verwenden dieselbe Bedingung, | |
| die den übereinstimmenden Wert in der Rückreferenz %2 belässt. %1 ist der | |
| Anfang des Query-Strings (bis zum interessierenden Schlüssel) und %3 ist | |
| der Rest. Diese Bedingung ist etwas komplex, um Flexibilität zu gewährleisten | |
| und doppelte '&&' in den Ersetzungen zu vermeiden.</p> | |
| <ul> | |
| <li>Diese Lösung entfernt den übereinstimmenden Schlüssel und Wert: | |
| <highlight language="config"> | |
| # mykey=??? entfernen | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteRule "(.*)" "$1?%1%3" | |
| </highlight> | |
| </li> | |
| <li>Diese Lösung verwendet den erfassten Wert in der URL-Ersetzung | |
| und verwirft den Rest des ursprünglichen Query-Strings durch Anhängen | |
| eines '?': | |
| <highlight language="config"> | |
| # Vom Query-String in PATH_INFO kopieren | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteRule "(.*)" "$1/products/%2/?" [PT] | |
| </highlight> | |
| </li> | |
| <li>Diese Lösung prüft den erfassten Wert in einer nachfolgenden Bedingung: | |
| <highlight language="config"> | |
| # Den Wert von mykey im Query-String erfassen | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteCond "%2" !=not-so-secret-value | |
| RewriteRule "(.*)" "-" [F] | |
| </highlight> | |
| </li> | |
| <li>Diese Lösung zeigt die Umkehrung der vorherigen und kopiert | |
| Pfadkomponenten (möglicherweise PATH_INFO) aus der URL in den | |
| Query-String. | |
| <highlight language="config"> | |
| # Die gewünschte URL könnte /products/kitchen-sink sein, und das Skript erwartet | |
| # /path?products=kitchen-sink. | |
| RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT] | |
| </highlight> | |
| </li> | |
| </ul> | |
| </dd> | |
| </dl> | |
| </section> | |
| </manualpage> |