blob: 1074fb7418f831b9e286aa4da8fc5ef23f91b5a4 [file]
<!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> &gt; <a href="https://httpd.apache.org/">HTTP-Server</a> &gt; <a href="https://httpd.apache.org/docs/">Dokumentation</a> &gt; <a href="../">Version 2.5</a> &gt; <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&uuml;gbare Sprachen: </span><a href="../de/rewrite/remapping.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/rewrite/remapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a> |
<a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese">&nbsp;zh-cn&nbsp;</a></p>
</div>
<div class="outofdate">Diese &Uuml;bersetzung ist m&ouml;glicherweise
nicht mehr aktuell. Bitte pr&uuml;fen Sie die englische Version auf
die neuesten &Auml;nderungen.</div>
<p>Dieses Dokument erg&auml;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&ouml;nnen, um Anfragen
umzuleiten und neu zuzuordnen. Dies beinhaltet viele Beispiele f&uuml;r g&auml;ngige
Verwendungen von <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, einschlie&szlig;lich detaillierter
Beschreibungen, wie jedes einzelne funktioniert.</p>
<div class="warning">Beachten Sie, dass viele dieser Beispiele nicht unver&auml;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&uuml;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&auml;rtskompatibilit&auml;t bei &Auml;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&uuml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Angenommen, wir haben k&uuml;rzlich die Seite
<code>foo.html</code> in <code>bar.html</code> umbenannt und
m&ouml;chten nun die alte URL aus Gr&uuml;nden der Abw&auml;rtskompatibilit&auml;t
weiterhin bereitstellen. Dabei sollen die Benutzer der alten URL
jedoch nicht bemerken, dass die Seite umbenannt wurde - das hei&szlig;t,
die Adresse soll sich in ihrem Browser nicht &auml;ndern.</p>
</dd>
<dt>L&ouml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Angenommen erneut, dass wir k&uuml;rzlich die Seite
<code>foo.html</code> in <code>bar.html</code> umbenannt haben und
nun die alte URL aus Gr&uuml;nden der Abw&auml;rtskompatibilit&auml;t weiterhin
bereitstellen m&ouml;chten. Diesmal m&ouml;chten wir aber, dass die Benutzer
der alten URL auf die neue hingewiesen werden, d.h. die
Adresszeile ihres Browsers soll sich ebenfalls &auml;ndern.</p>
</dd>
<dt>L&ouml;sung:</dt>
<dd>
<p>Wir erzwingen eine HTTP-Umleitung auf die neue URL, was zu einer
&Auml;nderung der Browser-Adresszeile und damit der Ansicht der Benutzer
f&uuml;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&ouml;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&uuml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Wenn eine Ressource auf einen anderen Server verschoben wurde,
m&ouml;chten Sie m&ouml;glicherweise, dass URLs f&uuml;r eine gewisse Zeit weiterhin
auf dem alten Server funktionieren, w&auml;hrend die Benutzer ihre
Lesezeichen aktualisieren.</p>
</dd>
<dt>L&ouml;sung:</dt>
<dd>
<p>Sie k&ouml;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&ouml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Wie k&ouml;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&ouml;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&uuml;hrt wird. So f&uuml;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&auml;rtskompatibilit&auml;t bei &Auml;nderung der Dateiendung <a title="Permanent link" href="#backward-compatibility" class="permalink">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Wie k&ouml;nnen wir URLs abw&auml;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&ouml;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&auml;ndert.</p>
<pre class="prettyprint lang-config"># Abw&auml;rtskompatibilit&auml;ts-Regelsatz f&uuml;r
# Umschreibung von document.html zu document.php
# wenn und nur wenn document.php existiert
&lt;Directory "/var/www/htdocs"&gt;
RewriteEngine on
RewriteBase "/var/www/htdocs"
RewriteCond "$1.php" -f
RewriteCond "$1.html" !-f
RewriteRule "^(.*).html$" "$1.php"
&lt;/Directory&gt;</pre>
</dd>
<dt>Diskussion</dt>
<dd>
<p>Dieses Beispiel nutzt eine oft &uuml;bersehene Funktion von
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, indem es die Ausf&uuml;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&ouml;glicht
es uns, die Existenz der Original- (<code>document.html</code>) und
Zieldatei (<code>document.php</code>) unter Verwendung desselben
Basisdateinamens zu pr&uuml;fen.</p>
<p>Dieser Regelsatz ist f&uuml;r die Verwendung im Verzeichniskontext
(in einem &lt;Directory&gt;-Block oder in einer .htaccess-Datei)
konzipiert, sodass die <code>-f</code>-Pr&uuml;fungen im korrekten
Verzeichnispfad suchen. M&ouml;glicherweise m&uuml;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">&para;</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&uuml;r den
Zugriff auf dieselbe Website verwendet werden k&ouml;nnten. Wenn Sie
beispielsweise die Verwendung von <strong>www.example.com</strong>
anstelle von <strong>example.com</strong> erzwingen m&ouml;chten,
k&ouml;nnen Sie eine Variante des folgenden Rezepts verwenden.</dd>
<dt>L&ouml;sung:</dt>
<dd>
<p>Der allerbeste Weg, dies zu l&ouml;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&uuml;r den nicht-kanonischen Hostnamen.</p>
<pre class="prettyprint lang-config">&lt;VirtualHost *:80&gt;
ServerName undesired.example.com
ServerAlias example.com notthis.example.com
Redirect "/" "http://www.example.com/"
&lt;/VirtualHost&gt;
&lt;VirtualHost *:80&gt;
ServerName www.example.com
&lt;/VirtualHost&gt;</pre>
<p>Alternativ k&ouml;nnen Sie dies mit der
<code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code>-Direktive
erreichen: (<strong>ab Version 2.4</strong>)</p>
<pre class="prettyprint lang-config">&lt;If "%{HTTP_HOST} != 'www.example.com'"&gt;
Redirect "/" "http://www.example.com/"
&lt;/If&gt;</pre>
<p>Oder, um beispielsweise einen Teil Ihrer Website auf HTTPS umzuleiten,
k&ouml;nnten Sie Folgendes tun:</p>
<pre class="prettyprint lang-config">&lt;If "%{SERVER_PROTOCOL} != 'HTTPS'"&gt;
Redirect "/admin/" "https://www.example.com/admin/"
&lt;/If&gt;</pre>
<p>Wenn Sie aus irgendeinem Grund dennoch <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
verwenden m&ouml;chten - zum Beispiel, wenn Sie dies mit einer gr&ouml;&szlig;eren Menge
von RewriteRules ben&ouml;tigen - k&ouml;nnen Sie eines der folgenden Rezepte
verwenden.</p>
<p>F&uuml;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&uuml;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&uuml;r alle Domainnamen tun m&ouml;chten - das
hei&szlig;t, wenn Sie <strong>example.com</strong> f&uuml;r alle m&ouml;glichen
Werte von <strong>example.com</strong> auf
<strong>www.example.com</strong> umleiten m&ouml;chten, k&ouml;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&auml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Eine bestimmte Ressource k&ouml;nnte an einem von mehreren Orten
existieren, und wir m&ouml;chten an diesen Orten nach der Ressource
suchen, wenn sie angefordert wird. Vielleicht haben wir k&uuml;rzlich
unsere Verzeichnisstruktur umorganisiert und Inhalte auf mehrere
Orte verteilt.</p>
</dd>
<dt>L&ouml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Wir haben zahlreiche Spiegelserver unserer Website und m&ouml;chten
Besucher auf denjenigen umleiten, der sich in dem Land befindet, in
dem sie sich aufhalten.</p>
</dd>
<dt>L&ouml;sung:</dt>
<dd>
<p>Anhand des Hostnamens des anfragenden Clients bestimmen wir, aus
welchem Land er kommt. Wenn wir keine Aufl&ouml;sung seiner IP-Adresse
durchf&uuml;hren k&ouml;nnen, greifen wir auf einen Standardserver zur&uuml;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&uuml;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&auml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>
<p>Auf manchen Webservern gibt es mehr als eine URL f&uuml;r eine
Ressource. Normalerweise gibt es kanonische URLs (die tats&auml;chlich
verwendet und verteilt werden) und solche, die nur Abk&uuml;rzungen,
interne Adressen usw. sind. Unabh&auml;ngig davon, welche URL der
Benutzer mit der Anfrage angegeben hat, sollte er schlie&szlig;lich die
kanonische URL in der Adresszeile seines Browsers sehen.</p>
</dd>
<dt>L&ouml;sung:</dt>
<dd>
<p>Wir f&uuml;hren eine externe HTTP-Umleitung f&uuml;r alle nicht-kanonischen
URLs durch, um sie in der Adressanzeige des Browsers und f&uuml;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">&para;</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&ouml;chster Priorit&auml;t. Beispielsweise m&ouml;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&ouml;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&szlig;t, es schreibt eine Anfrage f&uuml;r <code>http://example.com/</code>
um, aber nicht eine Anfrage f&uuml;r <code>http://example.com/page.html</code>.
Wenn Sie tats&auml;chlich Ihr Document Root ge&auml;ndert haben - das hei&szlig;t, wenn
<strong>alle</strong> Ihre Inhalte tats&auml;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 &auml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>Sie m&ouml;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&ouml;sung:</dt>
<dd>
<p>Ab Version 2.2.16 sollten Sie hierf&uuml;r die <code class="directive"><a href="../mod/mod_dir.html#fallbackresource">FallbackResource</a></code>-Direktive verwenden:</p>
<pre class="prettyprint lang-config">&lt;Directory "/var/www/my_blog"&gt;
FallbackResource index.php
&lt;/Directory&gt;</pre>
<p>In &auml;lteren Versionen von Apache oder wenn Ihre Anforderungen
komplizierter sind, k&ouml;nnen Sie eine Variante des folgenden
Umschreibungssatzes verwenden, um dasselbe zu erreichen:</p>
<pre class="prettyprint lang-config">&lt;Directory "/var/www/my_blog"&gt;
RewriteBase "/my_blog"
RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f
RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d
RewriteRule "^" "index.php" [PT]
&lt;/Directory&gt;</pre>
<p>Wenn Sie andererseits die angeforderte URI als Query-String-Argument
an index.php &uuml;bergeben m&ouml;chten, k&ouml;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&auml;tze sowohl in einer
<code>.htaccess</code>-Datei als auch in einem &lt;Directory&gt;-Block
verwendet werden k&ouml;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">&para;</a></h2>
<dl>
<dt>Beschreibung:</dt>
<dd>Sie m&ouml;chten einen bestimmten Wert aus einem Query-String erfassen
und ihn entweder ersetzen oder in eine andere Komponente der URL
einbinden.</dd>
<dt>L&ouml;sungen:</dt>
<dd>
<p>Viele der L&ouml;sungen in diesem Abschnitt verwenden dieselbe Bedingung,
die den &uuml;bereinstimmenden Wert in der R&uuml;ckreferenz %2 bel&auml;sst. %1 ist der
Anfang des Query-Strings (bis zum interessierenden Schl&uuml;ssel) und %3 ist
der Rest. Diese Bedingung ist etwas komplex, um Flexibilit&auml;t zu gew&auml;hrleisten
und doppelte '&amp;&amp;' in den Ersetzungen zu vermeiden.</p>
<ul>
<li>Diese L&ouml;sung entfernt den &uuml;bereinstimmenden Schl&uuml;ssel und Wert:
<pre class="prettyprint lang-config"># mykey=??? entfernen
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteRule "(.*)" "$1?%1%3"</pre>
</li>
<li>Diese L&ouml;sung verwendet den erfassten Wert in der URL-Ersetzung
und verwirft den Rest des urspr&uuml;nglichen Query-Strings durch Anh&auml;ngen
eines '?':
<pre class="prettyprint lang-config"># Vom Query-String in PATH_INFO kopieren
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteRule "(.*)" "$1/products/%2/?" [PT]</pre>
</li>
<li>Diese L&ouml;sung pr&uuml;ft den erfassten Wert in einer nachfolgenden Bedingung:
<pre class="prettyprint lang-config"># Den Wert von mykey im Query-String erfassen
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteCond "%2" !=not-so-secret-value
RewriteRule "(.*)" "-" [F]</pre>
</li>
<li>Diese L&ouml;sung zeigt die Umkehrung der vorherigen und kopiert
Pfadkomponenten (m&ouml;glicherweise PATH_INFO) aus der URL in den
Query-String.
<pre class="prettyprint lang-config"># Die gew&uuml;nschte URL k&ouml;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&uuml;gbare Sprachen: </span><a href="../de/rewrite/remapping.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/rewrite/remapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a> |
<a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese">&nbsp;zh-cn&nbsp;</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 = '&#9776;';
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>