| <!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> |