| <!DOCTYPE html SYSTEM "about:legacy-compat"> | |
| <html lang="de"><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
| <meta content="width=device-width, initial-scale=1" name="viewport"> | |
| <!-- | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| This file is generated from xml source: DO NOT EDIT | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| --> | |
| <title>Umleitung und Neuzuordnung mit mod_rewrite - Apache HTTP Server Version 2.5</title> | |
| <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet"> | |
| <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size"> | |
| <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css"> | |
| <script src="../style/scripts/prettify.min.js"> | |
| </script> | |
| <link href="../images/favicon.png" rel="shortcut icon"></head> | |
| <body id="manual-page"><div id="page-header"> | |
| <p class="menu"><a href="../mod/">Module</a> | <a href="../mod/quickreference.html">Direktiven</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p> | |
| <p class="apache">Apache HTTP Server Version 2.5</p> | |
| <img alt="" src="../images/feather.png"></div> | |
| <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div> | |
| <div id="path"> | |
| <a href="https://www.apache.org/">Apache</a> > <a href="https://httpd.apache.org/">HTTP-Server</a> > <a href="https://httpd.apache.org/docs/">Dokumentation</a> > <a href="../">Version 2.5</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Umleitung und Neuzuordnung mit mod_rewrite</h1> | |
| <button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button> | |
| <div class="toplang"> | |
| <p><span>Verfügbare Sprachen: </span><a href="../de/rewrite/remapping.html" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/remapping.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> | |
| </div> | |
| <div class="outofdate">Diese Übersetzung ist möglicherweise | |
| nicht mehr aktuell. Bitte prüfen Sie die englische Version auf | |
| die neuesten Änderungen.</div> | |
| <p>Dieses Dokument ergänzt die <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| <a href="../mod/mod_rewrite.html">Referenzdokumentation</a>. Es beschreibt, | |
| wie Sie <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> verwenden können, um Anfragen | |
| umzuleiten und neu zuzuordnen. Dies beinhaltet viele Beispiele für gängige | |
| Verwendungen von <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, einschließlich detaillierter | |
| Beschreibungen, wie jedes einzelne funktioniert.</p> | |
| <div class="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.</div> | |
| </div> | |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#old-to-new">Von Alt zu Neu (intern)</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#old-to-new-extern">Umschreiben von Alt zu Neu (extern)</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#movehomedirs">Ressource auf einen anderen Server verschoben</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#static-to-dynamic">Von statisch zu dynamisch</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#backward-compatibility">Abwärtskompatibilität bei Änderung der Dateiendung</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#canonicalhost">Kanonische Hostnamen</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#multipledirs">Suche nach Seiten in mehr als einem Verzeichnis</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#archive-access-multiplexer">Umleitung auf geografisch verteilte Server</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#canonicalurl">Kanonische URLs</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#moveddocroot">Verschobenes <code>DocumentRoot</code></a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#fallback-resource">Fallback-Ressource</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#rewrite-query">Query-String umschreiben</a></li> | |
| </ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Moduldokumentation</a></li><li><a href="intro.html">Einführung in mod_rewrite</a></li><li><a href="access.html">Zugriffskontrolle</a></li><li><a href="vhosts.html">Virtuelle Hosts</a></li><li><a href="proxy.html">Proxying</a></li><li><a href="rewritemap.html">Verwendung von RewriteMap</a></li><li><a href="advanced.html">Fortgeschrittene Techniken</a></li><li><a href="avoid.html">Wann man mod_rewrite nicht verwenden sollte</a></li></ul></div> | |
| <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="old-to-new">Von Alt zu Neu (intern) <a title="Permanent link" href="#old-to-new" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>/bar</strong>.html" [PT]</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="old-to-new-extern">Umschreiben von Alt zu Neu (extern) <a title="Permanent link" href="#old-to-new-extern" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>bar</strong>.html" [<strong>R</strong>]</pre> | |
| </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. <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> wurde in | |
| diesem früheren Beispiel verwendet, um die Umleitung vor dem Client | |
| zu verbergen:</p> | |
| <pre class="prettyprint lang-config">Redirect "/foo.html" "/bar.html"</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="movehomedirs">Ressource auf einen anderen Server verschoben <a title="Permanent link" href="#movehomedirs" class="permalink">¶</a></h2> | |
| <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 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> verwenden, um diese URLs | |
| auf den neuen Server umzuleiten, aber Sie könnten auch die Redirect- | |
| oder RedirectMatch-Direktive in Betracht ziehen.</p> | |
| <pre class="prettyprint lang-config">#Mit mod_rewrite | |
| RewriteEngine on | |
| RewriteRule "^/docs/(.+)" "http://new.example.com/docs/$1" [R,L]</pre> | |
| <pre class="prettyprint lang-config">#Mit RedirectMatch | |
| RedirectMatch "^/docs/(.*)" "http://new.example.com/docs/$1"</pre> | |
| <pre class="prettyprint lang-config">#Mit Redirect | |
| Redirect "/docs/" "http://new.example.com/docs/"</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="static-to-dynamic">Von statisch zu dynamisch <a title="Permanent link" href="#static-to-dynamic" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteBase "/~quux/" | |
| RewriteRule "^foo\.html$" "foo.cgi" [H=<strong>cgi-script</strong>]</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="backward-compatibility">Abwärtskompatibilität bei Änderung der Dateiendung <a title="Permanent link" href="#backward-compatibility" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-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></pre> | |
| </dd> | |
| <dt>Diskussion</dt> | |
| <dd> | |
| <p>Dieses Beispiel nutzt eine oft übersehene Funktion von | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, indem es die Ausführungsreihenfolge des | |
| Regelsatzes ausnutzt. Insbesondere wertet <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| 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 <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code>-Direktive setzen, um das | |
| Verzeichnis anzugeben, in dem Sie arbeiten.</p> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="canonicalhost">Kanonische Hostnamen <a title="Permanent link" href="#canonicalhost" class="permalink">¶</a></h2> | |
| <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 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, | |
| sondern die <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code>-Direktive | |
| in einem virtuellen Host für den nicht-kanonischen Hostnamen.</p> | |
| <pre class="prettyprint lang-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></pre> | |
| <p>Alternativ können Sie dies mit der | |
| <code class="directive"><a href="../mod/core.html#if"><If></a></code>-Direktive | |
| erreichen: (<strong>ab Version 2.4</strong>)</p> | |
| <pre class="prettyprint lang-config"><If "%{HTTP_HOST} != 'www.example.com'"> | |
| Redirect "/" "http://www.example.com/" | |
| </If></pre> | |
| <p>Oder, um beispielsweise einen Teil Ihrer Website auf HTTPS umzuleiten, | |
| könnten Sie Folgendes tun:</p> | |
| <pre class="prettyprint lang-config"><If "%{SERVER_PROTOCOL} != 'HTTPS'"> | |
| Redirect "/admin/" "https://www.example.com/admin/" | |
| </If></pre> | |
| <p>Wenn Sie aus irgendeinem Grund dennoch <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| 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> | |
| <pre class="prettyprint lang-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]</pre> | |
| <p>Und für eine Website auf Port 80:</p> | |
| <pre class="prettyprint lang-config">RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] | |
| RewriteCond "%{HTTP_HOST}" "!^$" | |
| RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE]</pre> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteCond "%{HTTP_HOST}" "!^www\." [NC] | |
| RewriteCond "%{HTTP_HOST}" "!^$" | |
| RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE]</pre> | |
| <p>Diese Regelsätze funktionieren sowohl in Ihrer | |
| Hauptserverkonfigurationsdatei als auch in einer <code>.htaccess</code>-Datei, | |
| die im <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> des Servers | |
| abgelegt wird.</p> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="multipledirs">Suche nach Seiten in mehr als einem Verzeichnis <a title="Permanent link" href="#multipledirs" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-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]</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="archive-access-multiplexer">Umleitung auf geografisch verteilte Server <a title="Permanent link" href="#archive-access-multiplexer" class="permalink">¶</a></h2> | |
| <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 <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>-Direktive, | |
| um eine Liste der gewünschten Server zu erstellen.</p> | |
| <pre class="prettyprint lang-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]</pre> | |
| <div class="example"><p><code> | |
| ## 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## | |
| </code></p></div> | |
| </dd> | |
| <dt>Diskussion</dt> | |
| <dd> | |
| <div class="warning">Dieser Regelsatz setzt voraus, dass | |
| <code class="directive"><a href="../mod/core.html#hostnamelookups">HostNameLookups</a></code> auf <code>on</code> | |
| gesetzt ist, was einen erheblichen Leistungseinbruch bedeuten kann.</div> | |
| <p>Die <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>-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> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="canonicalurl">Kanonische URLs <a title="Permanent link" href="#canonicalurl" class="permalink">¶</a></h2> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteRule "^/(puppies|canines)/(.*)" "/dogs/$2" [R]</pre> | |
| </dd> | |
| <dt>Diskussion:</dt> | |
| <dd> | |
| Dies sollte eigentlich mit Redirect- oder RedirectMatch-Direktiven | |
| erreicht werden: | |
| <pre class="prettyprint lang-config">RedirectMatch "^/(puppies|canines)/(.*)" "/dogs/$2"</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="moveddocroot">Verschobenes <code>DocumentRoot</code> <a title="Permanent link" href="#moveddocroot" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt>Beschreibung:</dt> | |
| <dd> | |
| <p>Normalerweise entspricht das <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> | |
| 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> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteRule "^/$" "/about/" [<strong>R</strong>]</pre> | |
| <p>Beachten Sie, dass dies auch mit der <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code>-Direktive gehandhabt werden | |
| kann:</p> | |
| <pre class="prettyprint lang-config">RedirectMatch "^/$" "http://example.com/about/"</pre> | |
| <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 | |
| <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-Direktive zu ändern | |
| oder alle Inhalte ein Verzeichnis nach oben zu verschieben, anstatt URLs | |
| umzuschreiben.</p> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="fallback-resource">Fallback-Ressource <a title="Permanent link" href="#fallback-resource" class="permalink">¶</a></h2> | |
| <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 <code class="directive"><a href="../mod/mod_dir.html#fallbackresource">FallbackResource</a></code>-Direktive verwenden:</p> | |
| <pre class="prettyprint lang-config"><Directory "/var/www/my_blog"> | |
| FallbackResource index.php | |
| </Directory></pre> | |
| <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> | |
| <pre class="prettyprint lang-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></pre> | |
| <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> | |
| <pre class="prettyprint lang-config">RewriteRule "(.*)" "index.php?$1" [PT,QSA]</pre> | |
| <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> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="rewrite-query">Query-String umschreiben <a title="Permanent link" href="#rewrite-query" class="permalink">¶</a></h2> | |
| <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: | |
| <pre class="prettyprint lang-config"># mykey=??? entfernen | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteRule "(.*)" "$1?%1%3"</pre> | |
| </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 '?': | |
| <pre class="prettyprint lang-config"># Vom Query-String in PATH_INFO kopieren | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteRule "(.*)" "$1/products/%2/?" [PT]</pre> | |
| </li> | |
| <li>Diese Lösung prüft den erfassten Wert in einer nachfolgenden Bedingung: | |
| <pre class="prettyprint lang-config"># Den Wert von mykey im Query-String erfassen | |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" | |
| RewriteCond "%2" !=not-so-secret-value | |
| RewriteRule "(.*)" "-" [F]</pre> | |
| </li> | |
| <li>Diese Lösung zeigt die Umkehrung der vorherigen und kopiert | |
| Pfadkomponenten (möglicherweise PATH_INFO) aus der URL in den | |
| Query-String. | |
| <pre class="prettyprint lang-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]</pre> | |
| </li> | |
| </ul> | |
| </dd> | |
| </dl> | |
| </div></div> | |
| <div class="bottomlang"> | |
| <p><span>Verfügbare Sprachen: </span><a href="../de/rewrite/remapping.html" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/remapping.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> | |
| </div><div id="footer"> | |
| <p class="apache">Copyright 2026 The Apache Software Foundation.<br>Lizenziert unter der <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> | |
| <p class="menu"><a href="../mod/">Module</a> | <a href="../mod/quickreference.html">Direktiven</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p></div><script><!--//--><![CDATA[//><!-- | |
| if (typeof(prettyPrint) !== 'undefined') { | |
| prettyPrint(); | |
| } | |
| var langToggle = document.querySelector('.lang-toggle'); | |
| var topLang = document.querySelector('.toplang'); | |
| if (langToggle && topLang) { | |
| langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); }); | |
| } | |
| var qv = document.getElementById('quickview'); | |
| if (qv) { | |
| document.body.appendChild(qv); | |
| var qvBtn = document.createElement('button'); | |
| qvBtn.className = 'qv-toggle'; | |
| qvBtn.setAttribute('aria-label', 'Toggle page navigation'); | |
| qvBtn.innerHTML = '☰'; | |
| document.body.appendChild(qvBtn); | |
| qvBtn.addEventListener('click', function() { | |
| var isOpen = qv.classList.toggle('open'); | |
| if (isOpen) { | |
| qv.style.top = window.scrollY + 10 + 'px'; | |
| } | |
| }); | |
| window.addEventListener('scroll', function() { qv.classList.remove('open'); }); | |
| } | |
| //--><!]]></script> | |
| </body></html> |