| <!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>RewriteRule-Flags - 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>RewriteRule-Flags</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/flags.html" title="Deutsch"> de </a> | |
| <a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </a> | |
| <a href="../es/rewrite/flags.html" hreflang="es" rel="alternate" title="Español"> es </a> | |
| <a href="../fr/rewrite/flags.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | |
| <a href="../ja/rewrite/flags.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | |
| <a href="../ko/rewrite/flags.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | |
| <a href="../tr/rewrite/flags.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | |
| <a href="../zh-cn/rewrite/flags.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 behandelt die Flags, die für die Direktive |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> verfügbar sind, |
| und bietet detaillierte Erklärungen und Beispiele.</p> |
| </div> |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#introduction">Einführung</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_b">B (Rückreferenzen maskieren)</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_bnp">BNP|backrefnoplus (Leerzeichen nicht zu + maskieren)</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_bctls">BCTLS</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_bne">BNE</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_c">C|chain</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_co">CO|cookie</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_dpi">DPI|discardpath</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_e">E|env</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_end">END</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_f">F|forbidden</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_g">G|gone</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_h">H|handler</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_l">L|last</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_n">N|next</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_nc">NC|nocase</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_ne">NE|noescape</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_ns">NS|nosubreq</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_p">P|proxy</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_pt">PT|passthrough</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_qsa">QSA|qsappend</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_qsd">QSD|qsdiscard</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_qsl">QSL|qslast</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_r">R|redirect</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_s">S|skip</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_t">T|type</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_unsafe_allow_3f">UnsafeAllow3F</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_unsafe_prefix_stat">UnsafePrefixStat</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#flag_unc">UNC</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="remapping.html">Umleitung und Neuzuordnung</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="introduction">Einführung <a title="Permanent link" href="#introduction" class="permalink">¶</a></h2> |
| <p>Das Verhalten einer <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> |
| kann durch ein oder mehrere Flags modifiziert werden. Flags werden in |
| eckigen Klammern am Ende der Regel angegeben, und mehrere Flags werden |
| durch Kommas getrennt.</p> |
| <pre class="prettyprint lang-config">RewriteRule pattern target [Flag1,Flag2,Flag3]</pre> |
| |
| |
| <p>Jedes Flag hat (mit wenigen Ausnahmen) eine Kurzform, wie |
| <code>CO</code>, sowie eine Langform, wie <code>cookie</code>. |
| Obwohl es am häufigsten ist, die Kurzform zu verwenden, wird empfohlen, |
| sich mit der Langform vertraut zu machen, damit Sie sich merken können, |
| was jedes Flag bewirken soll. Einige Flags akzeptieren ein oder mehrere |
| Argumente. Flags unterscheiden nicht zwischen Groß- und Kleinschreibung.</p> |
| |
| <p>Flags, die mit der Anfrage verknüpfte Metadaten ändern (T=, H=, E=), |
| haben im Verzeichniskontext und htaccess-Kontext keine Wirkung, wenn eine |
| Ersetzung (außer '-') während derselben Runde der Umschreibungsverarbeitung |
| durchgeführt wird.</p> |
| |
| <p>Hier werden alle verfügbaren Flags vorgestellt, zusammen mit einem |
| Beispiel, wie Sie diese verwenden könnten.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_b">B (Rückreferenzen maskieren) <a title="Permanent link" href="#flag_b" class="permalink">¶</a></h2> |
| <p>Das [B]-Flag weist <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> an, nicht-alphanumerische |
| Zeichen vor der Anwendung der Transformation zu maskieren.</p> |
| |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> muss URLs demaskieren, bevor sie zugeordnet werden, |
| sodass Rückreferenzen zum Zeitpunkt ihrer Anwendung demaskiert sind. |
| Mit dem B-Flag werden nicht-alphanumerische Zeichen in Rückreferenzen |
| maskiert. Betrachten Sie beispielsweise die folgende Regel:</p> |
| |
| <p>Für eine ähnliche Maskierung von Server-Variablen siehe die |
| "escape"-<a href="#mapfunc">Zuordnungsfunktion</a></p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "^search/(.*)$" "/search.php?term=$1"</pre> |
| |
| |
| <p>Bei einem Suchbegriff von 'x & y/z' kodiert ein Browser diesen als |
| 'x%20%26%20y%2Fz', sodass die Anfrage 'search/x%20%26%20y%2Fz' lautet. Ohne das B-Flag |
| wird diese Rewrite-Regel auf 'search.php?term=x & y/z' abgebildet, was |
| keine gültige URL ist und daher als |
| <code>search.php?term=x%20&y%2Fz=</code> kodiert würde, was nicht beabsichtigt war.</p> |
| |
| <p>Mit gesetztem B-Flag bei derselben Regel werden die Parameter erneut |
| kodiert, bevor sie an die Ausgabe-URL übergeben werden, was zu einer korrekten |
| Zuordnung zu <code>/search.php?term=x%20%26%20y%2Fz</code> führt.</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "^search/(.*)$" "/search.php?term=$1" [B,PT]</pre> |
| |
| |
| <p>Beachten Sie, dass Sie möglicherweise auch <code class="directive"><a href="../mod/core.html#allowencodedslashes">AllowEncodedSlashes</a></code> auf <code>On</code> setzen müssen, |
| damit dieses spezielle Beispiel funktioniert, da httpd keine kodierten |
| Schrägstriche in URLs zulässt und bei deren Auftreten einen 404-Fehler |
| zurückgibt.</p> |
| |
| <p>Diese Maskierung ist besonders notwendig in einer Proxy-Situation, |
| wenn das Backend bei einer nicht-maskierten URL Probleme haben könnte.</p> |
| |
| <p>Eine Alternative zu diesem Flag ist die Verwendung einer <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>, die gegen %{THE_REQUEST} prüft, welche Strings |
| in kodierter Form erfasst.</p> |
| |
| <p>Ab Version 2.4.26 können Sie die Maskierung auf bestimmte Zeichen |
| in Rückreferenzen beschränken, indem Sie diese auflisten: <code>[B=#?;]</code>. |
| Hinweis: Das Leerzeichen kann in der Liste der zu maskierenden Zeichen |
| verwendet werden, aber Sie müssen das gesamte dritte Argument der |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> in Anführungszeichen |
| setzen und das Leerzeichen darf nicht das letzte Zeichen in der Liste sein.</p> |
| |
| <pre class="prettyprint lang-config"># Leerzeichen und Fragezeichen maskieren. Die Anführungszeichen um das letzte Argument |
| # sind erforderlich, wenn ein Leerzeichen enthalten ist. |
| RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B= ?]"</pre> |
| |
| |
| <p>Um die auf diese Weise maskierten Zeichen einzuschränken, siehe <a href="#flag_bne">#flag_bne</a> |
| und <a href="#flag_bctls">#flag_bctls</a></p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_bnp">BNP|backrefnoplus (Leerzeichen nicht zu + maskieren) <a title="Permanent link" href="#flag_bnp" class="permalink">¶</a></h2> |
| <p>Das [BNP]-Flag weist <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> an, das Leerzeichen |
| in einer Rückreferenz zu %20 statt zu '+' zu maskieren. Nützlich, wenn die |
| Rückreferenz im Pfadteil statt im Query-String verwendet wird.</p> |
| |
| <pre class="prettyprint lang-config"># Leerzeichen im Pfad zu %20 maskieren statt zu +, wie es bei Formularübermittlungen |
| # über den Query-String verwendet wird |
| RewriteRule "^search/(.*)$" "/search.php/$1" "[B,BNP]"</pre> |
| |
| |
| <p>Dieses Flag ist ab Version 2.4.26 verfügbar.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_bctls">BCTLS <a title="Permanent link" href="#flag_bctls" class="permalink">¶</a></h2> |
| <p>Das [BCTLS]-Flag ähnelt dem [B]-Flag, maskiert aber nur |
| Steuerzeichen und das Leerzeichen. Dies ist dieselbe Menge von |
| Zeichen, die abgelehnt werden, wenn sie unkodiert in den Query-String |
| kopiert werden.</p> |
| |
| <pre class="prettyprint lang-config"># Steuerzeichen und Leerzeichen maskieren |
| RewriteRule "^search/(.*)$" "/search.php/$1" "[BCTLS]"</pre> |
| |
| |
| <p>Dieses Flag ist ab Version 2.5.1 verfügbar.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_bne">BNE <a title="Permanent link" href="#flag_bne" class="permalink">¶</a></h2> |
| <p>Die Liste der Zeichen in [BNE=...] wird als Ausnahmen von den |
| Zeichen der [B]- oder [BCTLS]-Flags behandelt. Die aufgelisteten Zeichen |
| werden nicht maskiert.</p> |
| |
| <pre class="prettyprint lang-config"># Standardzeichen maskieren, aber / beibehalten |
| RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B,BNE=/]"</pre> |
| |
| |
| <p>Dieses Flag ist ab Version 2.5.1 verfügbar.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_c">C|chain <a title="Permanent link" href="#flag_c" class="permalink">¶</a></h2> |
| <p>Das [C]- oder [chain]-Flag zeigt an, dass die <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> mit der nächsten Regel |
| verkettet ist. Wenn die Regel übereinstimmt, wird sie wie gewohnt |
| verarbeitet und die Kontrolle geht an die nächste Regel über. Wenn sie |
| jedoch nicht übereinstimmt, werden die nächste Regel und alle weiteren |
| verketteten Regeln übersprungen.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_co">CO|cookie <a title="Permanent link" href="#flag_co" class="permalink">¶</a></h2> |
| <p>Das [CO]- oder [cookie]-Flag ermöglicht es Ihnen, ein Cookie zu setzen, |
| wenn eine bestimmte <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> |
| übereinstimmt. Das Argument besteht aus drei erforderlichen und fünf |
| optionalen Feldern.</p> |
| |
| <p>Die vollständige Syntax für das Flag einschließlich aller Attribute |
| lautet wie folgt:</p> |
| |
| <div class="example"><p><code> |
| [CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly:samesite] |
| </code></p></div> |
| |
| <p>Wenn ein literales ':'-Zeichen in einem der Cookie-Felder benötigt wird, |
| steht eine alternative Syntax zur Verfügung. Um die alternative Syntax zu |
| verwenden, sollte der Cookie-"Name" mit einem ';'-Zeichen eingeleitet werden, |
| und die Feldtrenner sollten als ';' angegeben werden.</p> |
| |
| <div class="example"><p><code> |
| [CO=;NAME;VALUE:MOREVALUE;DOMAIN;lifetime;path;secure;httponly;samesite] |
| </code></p></div> |
| |
| <p>Sie müssen einen Namen, einen Wert und eine Domain angeben, damit das |
| Cookie gesetzt wird.</p> |
| |
| <dl> |
| <dt>Domain</dt> |
| <dd>Die Domain, für die das Cookie gültig sein soll. Dies kann ein |
| Hostname sein, wie <code>www.example.com</code>, oder eine Domain, |
| wie <code>.example.com</code>. Sie muss aus mindestens zwei durch einen |
| Punkt getrennten Teilen bestehen. Das heißt, sie kann nicht einfach nur |
| <code>.com</code> oder <code>.net</code> sein. Cookies dieser Art werden |
| durch das Cookie-Sicherheitsmodell verboten.</dd> |
| </dl> |
| |
| <p>Sie können optional auch die folgenden Werte setzen:</p> |
| |
| <dl> |
| <dt>Lebensdauer</dt> |
| <dd>Die Zeit, für die das Cookie bestehen bleibt, in Minuten.</dd> |
| <dd>Ein Wert von 0 bedeutet, dass das Cookie nur für die aktuelle |
| Browser-Sitzung bestehen bleibt. Dies ist der Standardwert, wenn keiner |
| angegeben wird.</dd> |
| <dd>Ein negativer Wert bewirkt, dass das Cookie im Browser gelöscht wird.</dd> |
| |
| <dt>Pfad</dt> |
| <dd>Der Pfad auf der aktuellen Website, für den das Cookie gültig ist, |
| wie <code>/customers/</code> oder <code>/files/download/</code>.</dd> |
| <dd>Standardmäßig ist dies auf <code>/</code> gesetzt - also die gesamte |
| Website.</dd> |
| |
| <dt>Secure</dt> |
| <dd>Wenn auf <code>secure</code>, <code>true</code> oder <code>1</code> |
| gesetzt, wird das Cookie nur über sichere (https-)Verbindungen |
| übertragen.</dd> |
| |
| <dt>httponly</dt> |
| <dd>Wenn auf <code>HttpOnly</code>, <code>true</code> oder |
| <code>1</code> gesetzt, wird das Cookie mit dem <code>HttpOnly</code>-Flag |
| versehen, was bedeutet, dass das Cookie für JavaScript-Code in Browsern, |
| die diese Funktion unterstützen, nicht zugänglich ist.</dd> |
| |
| <dt>samesite</dt> |
| <dd>Wenn auf etwas anderes als <code>false</code> oder <code>0</code> gesetzt, |
| wird das <code>SameSite</code>-Attribut auf den angegebenen Wert gesetzt. |
| Typische Werte sind <code>None</code>, <code>Lax</code> und |
| <code>Strict</code>. Verfügbar ab Version 2.5.1.</dd> |
| </dl> |
| |
| <p>Betrachten Sie dieses Beispiel:</p> |
| |
| <pre class="prettyprint lang-config">RewriteEngine On |
| RewriteRule "^/index\.html" "-" [CO=frontdoor:yes:.example.com:1440:/]</pre> |
| |
| |
| <p>In diesem Beispiel schreibt die Regel die Anfrage nicht um. |
| Das "-"-Umschreibungsziel weist <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> an, die Anfrage |
| unverändert weiterzuleiten. Stattdessen setzt sie ein Cookie |
| namens 'frontdoor' auf den Wert 'yes'. Das Cookie ist für jeden Host |
| in der <code>.example.com</code>-Domain gültig. Es läuft in 1440 |
| Minuten (24 Stunden) ab und wird für alle URIs zurückgegeben.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_dpi">DPI|discardpath <a title="Permanent link" href="#flag_dpi" class="permalink">¶</a></h2> |
| <p>Das DPI-Flag bewirkt, dass der PATH_INFO-Teil des umgeschriebenen URI |
| verworfen wird.</p> |
| <p>Dieses Flag ist ab Version 2.2.12 verfügbar.</p> |
| <p>Im Verzeichniskontext wird der URI, gegen den jede |
| <code class="directive">RewriteRule</code> prüft, aus der Verkettung der aktuellen |
| Werte von URI und PATH_INFO gebildet.</p> |
| |
| <p>Der aktuelle URI kann der ursprünglich vom Client angeforderte URI sein, |
| das Ergebnis einer vorherigen Runde der <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung |
| oder das Ergebnis einer früheren Regel in der aktuellen Runde der |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung.</p> |
| |
| <p>Im Gegensatz dazu spiegelt der PATH_INFO, der vor jeder Regel an den |
| URI angehängt wird, nur den Wert von PATH_INFO vor dieser Runde der |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung wider. Wenn daher große Teile |
| des URI in einer Ersetzung in mehreren <code class="directive">RewriteRule</code>-Direktiven |
| abgeglichen und kopiert werden, ohne zu berücksichtigen, welche Teile des |
| URI vom aktuellen PATH_INFO stammen, kann der endgültige URI mehrere |
| Kopien von PATH_INFO enthalten.</p> |
| |
| <p>Verwenden Sie dieses Flag bei jeder Ersetzung, bei der der PATH_INFO, |
| der aus der vorherigen Zuordnung dieser Anfrage zum Dateisystem resultierte, |
| nicht von Interesse ist. Dieses Flag vergisst dauerhaft den PATH_INFO, |
| der vor dieser Runde der <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung festgelegt wurde. |
| PATH_INFO wird erst neu berechnet, wenn die aktuelle Runde der |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung abgeschlossen ist. Nachfolgende Regeln |
| während dieser Runde der Verarbeitung sehen nur das direkte Ergebnis der |
| Ersetzungen, ohne angehängten PATH_INFO.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_e">E|env <a title="Permanent link" href="#flag_e" class="permalink">¶</a></h2> |
| <p>Mit dem [E]- oder [env]-Flag können Sie den Wert einer Umgebungsvariable |
| setzen. Beachten Sie, dass einige Umgebungsvariablen nach der Ausführung |
| der Regel gesetzt werden können, wodurch das von Ihnen Gesetzte überschrieben |
| wird. Siehe <a href="../env.html">das Dokument zu Umgebungsvariablen</a> |
| für weitere Details zur Funktionsweise von Umgebungsvariablen.</p> |
| |
| <p>Die vollständige Syntax für dieses Flag lautet:</p> |
| |
| <pre class="prettyprint lang-config">[E=VAR:VAL] |
| [E=!VAR]</pre> |
| |
| |
| <p><code>VAL</code> kann Rückreferenzen (<code>$N</code> oder |
| <code>%N</code>) enthalten, die expandiert werden.</p> |
| |
| <p>In der Kurzform</p> |
| |
| <div class="example"><p><code> |
| [E=VAR] |
| </code></p></div> |
| |
| <p>können Sie die Umgebungsvariable namens <code>VAR</code> auf einen |
| leeren Wert setzen.</p> |
| |
| <p>Die Form</p> |
| |
| <div class="example"><p><code> |
| [E=!VAR] |
| </code></p></div> |
| |
| <p>ermöglicht es, eine zuvor gesetzte Umgebungsvariable namens |
| <code>VAR</code> zu löschen.</p> |
| |
| <p>Umgebungsvariablen können dann in verschiedenen Kontexten verwendet |
| werden, einschließlich CGI-Programmen, anderen RewriteRule-Direktiven |
| oder CustomLog-Direktiven.</p> |
| |
| <p>Das folgende Beispiel setzt eine Umgebungsvariable namens 'image' auf |
| den Wert '1', wenn der angeforderte URI eine Bilddatei ist. Dann wird |
| diese Umgebungsvariable verwendet, um diese Anfragen aus dem |
| Zugriffsprotokoll auszuschließen.</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "\.(png|gif|jpg)$" "-" [E=image:1] |
| CustomLog "logs/access_log" combined env=!image</pre> |
| |
| |
| <p>Beachten Sie, dass derselbe Effekt mit <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> erzielt werden kann. Diese |
| Technik wird als Beispiel angeboten, nicht als Empfehlung.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_end">END <a title="Permanent link" href="#flag_end" class="permalink">¶</a></h2> |
| <p>Die Verwendung des [END]-Flags beendet nicht nur die aktuelle Runde der |
| Umschreibungsverarbeitung (wie [L]), sondern verhindert auch jede |
| nachfolgende Umschreibungsverarbeitung im Verzeichniskontext (htaccess).</p> |
| |
| <p>Dies gilt nicht für neue Anfragen, die aus externen Umleitungen |
| resultieren.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_f">F|forbidden <a title="Permanent link" href="#flag_f" class="permalink">¶</a></h2> |
| <p>Die Verwendung des [F]-Flags bewirkt, dass der Server einen |
| 403-Forbidden-Statuscode an den Client zurückgibt. Obwohl dasselbe |
| Verhalten mit der <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>-Direktive |
| erreicht werden kann, ermöglicht dies mehr Flexibilität bei der Zuweisung |
| eines Forbidden-Status.</p> |
| |
| <p>Die folgende Regel verbietet das Herunterladen von <code>.exe</code>-Dateien |
| von Ihrem Server.</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "\.exe" "-" [F]</pre> |
| |
| |
| <p>Dieses Beispiel verwendet die "-"-Syntax für das Umschreibungsziel, |
| was bedeutet, dass der angeforderte URI nicht geändert wird. Es gibt |
| keinen Grund, zu einem anderen URI umzuschreiben, wenn Sie die Anfrage |
| verweigern möchten.</p> |
| |
| <p>Bei der Verwendung von [F] wird ein [L] impliziert - das heißt, die |
| Antwort wird sofort zurückgegeben und keine weiteren Regeln werden |
| ausgewertet.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_g">G|gone <a title="Permanent link" href="#flag_g" class="permalink">¶</a></h2> |
| <p>Das [G]-Flag zwingt den Server, einen 410-Gone-Status mit der |
| Antwort zurückzugeben. Dies zeigt an, dass eine Ressource früher |
| verfügbar war, aber nicht mehr verfügbar ist.</p> |
| |
| <p>Wie beim [F]-Flag verwenden Sie typischerweise die "-"-Syntax für das |
| Umschreibungsziel, wenn Sie das [G]-Flag verwenden:</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "oldproduct" "-" [G,NC]</pre> |
| |
| |
| <p>Bei der Verwendung von [G] wird ein [L] impliziert - das heißt, die |
| Antwort wird sofort zurückgegeben und keine weiteren Regeln werden |
| ausgewertet.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_h">H|handler <a title="Permanent link" href="#flag_h" class="permalink">¶</a></h2> |
| <p>Erzwingt, dass die resultierende Anfrage mit dem angegebenen |
| Handler behandelt wird. Beispielsweise könnte man dies verwenden, um |
| alle Dateien ohne Dateiendung vom PHP-Handler parsen zu lassen:</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "!\." "-" [H=application/x-httpd-php]</pre> |
| |
| |
| <p> |
| Der obige reguläre Ausdruck - <code>!\.</code> - stimmt mit jeder Anfrage |
| überein, die kein literales <code>.</code>-Zeichen enthält. |
| </p> |
| |
| <p>Dies kann auch verwendet werden, um den Handler basierend auf |
| bestimmten Bedingungen zu erzwingen. Beispielsweise ermöglicht der |
| folgende Ausschnitt, der im Server-Kontext verwendet wird, dass |
| <code>.php</code>-Dateien von <code>mod_php</code> <em>angezeigt</em> |
| werden, wenn sie mit der <code>.phps</code>-Erweiterung angefordert werden:</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]</pre> |
| |
| |
| <p>Der obige reguläre Ausdruck - <code>^(/source/.+\.php)s$</code> - stimmt |
| mit jeder Anfrage überein, die mit <code>/source/</code> beginnt, gefolgt von |
| einem oder mehreren Zeichen, gefolgt von <code>.phps</code>. Die Rückreferenz |
| $1 verweist auf die erfasste Übereinstimmung innerhalb der Klammern des |
| regulären Ausdrucks.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_l">L|last <a title="Permanent link" href="#flag_l" class="permalink">¶</a></h2> |
| <p>Das [L]-Flag bewirkt, dass <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> die Verarbeitung |
| des Regelsatzes stoppt. In den meisten Kontexten bedeutet dies, dass bei |
| Übereinstimmung der Regel keine weiteren Regeln verarbeitet werden. Dies |
| entspricht dem <code>last</code>-Befehl in Perl oder dem <code>break</code>-Befehl |
| in C. Verwenden Sie dieses Flag, um anzuzeigen, dass die aktuelle Regel |
| sofort angewendet werden soll, ohne weitere Regeln zu berücksichtigen.</p> |
| |
| <p>Wenn Sie <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> in |
| <code>.htaccess</code>-Dateien oder in |
| <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>-Abschnitten |
| verwenden, ist es wichtig, ein gewisses Verständnis dafür zu haben, wie die |
| Regeln verarbeitet werden. Die vereinfachte Form davon ist, dass nach der |
| Verarbeitung der Regeln die umgeschriebene Anfrage an die URL-Parsing-Engine |
| zurückgegeben wird. Es ist möglich, dass bei der Verarbeitung der |
| umgeschriebenen Anfrage die <code>.htaccess</code>-Datei oder der |
| <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>-Abschnitt |
| erneut angetroffen wird und der Regelsatz von Anfang an erneut durchlaufen |
| wird. Am häufigsten geschieht dies, wenn eine der Regeln eine Umleitung |
| auslöst - entweder intern oder extern - wodurch der Anfrageprozess von |
| vorne beginnt.</p> |
| |
| <p>Es ist daher wichtig, wenn Sie <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>-Direktiven in einem dieser |
| Kontexte verwenden, dass Sie explizite Maßnahmen ergreifen, um |
| Regelschleifen zu vermeiden, und sich nicht ausschließlich auf das [L]-Flag |
| verlassen, um die Ausführung einer Reihe von Regeln zu beenden, wie |
| unten gezeigt.</p> |
| |
| <p>Ein alternatives Flag, [END], kann verwendet werden, um nicht nur die |
| aktuelle Runde der Umschreibungsverarbeitung zu beenden, sondern auch |
| jede nachfolgende Umschreibungsverarbeitung im Verzeichniskontext (htaccess) |
| zu verhindern. Dies gilt nicht für neue Anfragen, die aus externen |
| Umleitungen resultieren.</p> |
| |
| <p>Das hier gegebene Beispiel schreibt jede Anfrage auf |
| <code>index.php</code> um und gibt die ursprüngliche Anfrage als |
| Query-String-Argument an <code>index.php</code> weiter. Die <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> stellt jedoch sicher, dass die |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> übersprungen wird, |
| wenn die Anfrage bereits für <code>index.php</code> bestimmt ist.</p> |
| |
| <pre class="prettyprint lang-config">RewriteBase "/" |
| RewriteCond "%{REQUEST_URI}" !=/index.php |
| RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]</pre> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_n">N|next <a title="Permanent link" href="#flag_n" class="permalink">¶</a></h2> |
| <p> |
| Das [N]-Flag bewirkt, dass der Regelsatz von oben neu gestartet wird, |
| wobei das bisherige Ergebnis des Regelsatzes als Ausgangspunkt verwendet wird. |
| Verwenden Sie es mit äußerster Vorsicht, da es zu Schleifen führen kann. |
| </p> |
| <p> |
| Das [Next]-Flag könnte beispielsweise verwendet werden, wenn Sie einen |
| bestimmten String oder Buchstaben wiederholt in einer Anfrage ersetzen |
| möchten. Das hier gezeigte Beispiel ersetzt A überall in einer Anfrage |
| durch B und fährt damit fort, bis keine weiteren A mehr zu ersetzen sind. |
| </p> |
| <pre class="prettyprint lang-config">RewriteRule "(.*)A(.*)" "$1B$2" [N]</pre> |
| |
| <p>Sie können sich dies als <code>while</code>-Schleife vorstellen: Solange |
| dieses Muster noch übereinstimmt (d.h. solange der URI noch ein |
| <code>A</code> enthält), führe diese Ersetzung durch (d.h. ersetze das |
| <code>A</code> durch ein <code>B</code>).</p> |
| |
| <p>Ab Version 2.5.0 gibt dieses Modul nach 10.000 Iterationen einen Fehler |
| zurück, um vor unbeabsichtigten Schleifen zu schützen. Eine alternative |
| maximale Anzahl von Iterationen kann durch Hinzufügen zum N-Flag angegeben |
| werden.</p> |
| <pre class="prettyprint lang-config"># Bereit, 1 Zeichen pro Schleifendurchlauf zu ersetzen |
| RewriteRule "(.+)[><;]$" "$1" [N=32000] |
| # ... oder nach 10 Schleifen aufgeben |
| RewriteRule "(.+)[><;]$" "$1" [N=10]</pre> |
| |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_nc">NC|nocase <a title="Permanent link" href="#flag_nc" class="permalink">¶</a></h2> |
| <p>Die Verwendung des [NC]-Flags bewirkt, dass die <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ohne Berücksichtigung der |
| Groß-/Kleinschreibung abgeglichen wird. Das heißt, es spielt keine Rolle, |
| ob Buchstaben im abgeglichenen URI als Groß- oder Kleinbuchstaben |
| erscheinen.</p> |
| |
| <p>Im folgenden Beispiel wird jede Anfrage nach einer Bilddatei an Ihren |
| dedizierten Bildserver weitergeleitet. Der Abgleich erfolgt ohne |
| Berücksichtigung der Groß-/Kleinschreibung, sodass beispielsweise sowohl |
| <code>.jpg</code>- als auch <code>.JPG</code>-Dateien akzeptiert werden.</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]</pre> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_ne">NE|noescape <a title="Permanent link" href="#flag_ne" class="permalink">¶</a></h2> |
| <p>Standardmäßig werden bei einer <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, |
| die zu einer externen Umleitung führt, alle Zeichen in der Ausgabe, die |
| nicht in der folgenden sicheren Menge enthalten sind, in ihre |
| Hexcode-Äquivalente (prozentcodiert) umgewandelt:</p> |
| |
| <ul> |
| <li>Alphanumerische Zeichen: <code>A-Z</code>, <code>a-z</code>, |
| <code>0-9</code></li> |
| <li>Sonderzeichen: <code>$-_.+!*'(),:;@&=/~</code></li> |
| </ul> |
| |
| <p>Beispielsweise würde <code>#</code> in <code>%23</code> umgewandelt |
| und <code>?</code> in <code>%3F</code>. Das <code>%</code>-Zeichen |
| wird ebenfalls maskiert (zu <code>%25</code>), was bedeutet, dass jede |
| bereits vorhandene Prozentkodierung in der Ersetzung doppelt kodiert wird.</p> |
| |
| <p>Die Verwendung des [NE]-Flags verhindert diese Maskierung und ermöglicht, |
| dass Zeichen wie <code>#</code> und <code>?</code> unverändert an die |
| Umleitungs-URL weitergegeben werden.</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]</pre> |
| |
| |
| <p> |
| Das obige Beispiel leitet <code>/anchor/xyz</code> auf |
| <code>/bigpage.html#xyz</code> um. Ohne [NE] würde das #-Zeichen in |
| sein Hexcode-Äquivalent <code>%23</code> umgewandelt, was dann zu einem |
| 404-Nicht-Gefunden-Fehler führen würde. |
| </p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_ns">NS|nosubreq <a title="Permanent link" href="#flag_ns" class="permalink">¶</a></h2> |
| <p>Die Verwendung des [NS]-Flags verhindert, dass die Regel auf |
| Unteranfragen angewendet wird. Beispielsweise ist eine Seite, die mittels |
| SSI (Server Side Include) eingebunden wird, eine Unteranfrage, und Sie |
| möchten möglicherweise Umschreibungen bei diesen Unteranfragen vermeiden. |
| Auch wenn <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> versucht, Informationen über mögliche |
| Standarddateien des Verzeichnisses herauszufinden (wie |
| <code>index.html</code>-Dateien), handelt es sich um eine interne |
| Unteranfrage, und Sie möchten häufig Umschreibungen bei solchen |
| Unteranfragen vermeiden. Bei Unteranfragen ist es nicht immer nützlich |
| und kann sogar Fehler verursachen, wenn der vollständige Regelsatz |
| angewendet wird. Verwenden Sie dieses Flag, um problematische Regeln |
| auszuschließen.</p> |
| |
| <p>Um zu entscheiden, ob Sie diese Regel verwenden sollten oder nicht: Wenn |
| Sie URLs mit CGI-Skripten voranstellen, um deren Verarbeitung durch das |
| CGI-Skript zu erzwingen, werden Sie wahrscheinlich bei Unteranfragen auf |
| Probleme (oder erheblichen Overhead) stoßen. In diesen Fällen verwenden |
| Sie dieses Flag.</p> |
| |
| <p> |
| Bilder, JavaScript-Dateien oder CSS-Dateien, die als Teil einer HTML-Seite |
| geladen werden, sind keine Unteranfragen - der Browser fordert sie als |
| separate HTTP-Anfragen an. |
| </p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_p">P|proxy <a title="Permanent link" href="#flag_p" class="permalink">¶</a></h2> |
| <p>Die Verwendung des [P]-Flags bewirkt, dass die Anfrage von |
| <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> behandelt und über eine Proxy-Anfrage verarbeitet |
| wird. Wenn Sie beispielsweise möchten, dass alle Bildanfragen von einem |
| Backend-Bildserver behandelt werden, könnten Sie Folgendes tun:</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "/(.*)\.( jpg|gif|png)$" "http://images.example.com/$1.$2" [P]</pre> |
| |
| |
| <p>Die Verwendung des [P]-Flags impliziert [L] - das heißt, die Anfrage |
| wird sofort durch den Proxy geleitet und nachfolgende Regeln werden nicht |
| berücksichtigt.</p> |
| |
| <p> |
| Sie müssen sicherstellen, dass der Ersetzungsstring ein gültiger URI ist |
| (typischerweise beginnend mit <code>http://</code><em>hostname</em>), |
| der von <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> verarbeitet werden kann. Andernfalls |
| erhalten Sie einen Fehler vom Proxy-Modul. Verwenden Sie dieses Flag, |
| um eine leistungsfähigere Implementierung der <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>-Direktive zu erreichen und |
| entfernte Inhalte in den Namensraum des lokalen Servers einzubinden.</p> |
| |
| <div class="warning"> |
| <h3>Sicherheitswarnung</h3> |
| <p>Seien Sie vorsichtig beim Aufbau der Ziel-URL der Regel und bedenken Sie |
| die Sicherheitsauswirkungen, wenn Sie dem Client Einfluss auf die Menge |
| der URLs gewähren, für die Ihr Server als Proxy fungiert. Stellen Sie |
| sicher, dass Schema und Hostname-Teil der URL entweder fest sind oder dem |
| Client keinen unangemessenen Einfluss gewähren.</p> |
| </div> |
| |
| <div class="warning"> |
| <h3>Leistungswarnung</h3> |
| <p>Die Verwendung dieses Flags löst die Nutzung von <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> aus, |
| ohne Verwaltung persistenter Verbindungen, da in diesem Fall der |
| Standard-Worker verwendet wird, der kein Connection-Pooling/-Reuse |
| durchführt.</p> |
| <p>Um persistente Verbindungen zu nutzen, müssen Sie einen |
| <code class="directive"><a href="../mod/mod_proxy.html#proxy">Proxy</a></code>-Block mindestens für den |
| Schema- und Host-Teil der Ziel-URL einrichten, der eine |
| <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code>-Direktive enthält, |
| in der Sie z.B. ein Timeout setzen.</p> |
| <p>Wenn Sie es mit <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> oder |
| <code class="directive"><a href="../mod/mod_proxy.html#proxypassmatch">ProxyPassMatch</a></code> einrichten, |
| werden persistente Verbindungen automatisch verwendet.</p> |
| </div> |
| |
| <p>Hinweis: <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> muss aktiviert sein, um dieses |
| Flag verwenden zu können.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_pt">PT|passthrough <a title="Permanent link" href="#flag_pt" class="permalink">¶</a></h2> |
| |
| <p> |
| Das Ziel (oder der Ersetzungsstring) in einer RewriteRule wird |
| standardmäßig als Dateipfad behandelt. Die Verwendung des [PT]-Flags |
| bewirkt, dass es stattdessen als URI behandelt wird. Das heißt, die |
| Verwendung des [PT]-Flags bewirkt, dass das Ergebnis der <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> durch die |
| URL-Zuordnung zurückgeleitet wird, sodass standortbasierte Zuordnungen |
| wie <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> oder <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> beispielsweise wirksam |
| werden können. |
| </p> |
| |
| <p> |
| Wenn Sie beispielsweise einen <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> |
| für /icons haben und eine <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dorthin zeigt, sollten |
| Sie das [PT]-Flag verwenden, um sicherzustellen, dass der |
| <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> ausgewertet wird. |
| </p> |
| |
| <pre class="prettyprint lang-config">Alias "/icons" "/usr/local/apache/icons" |
| RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]</pre> |
| |
| |
| <p> |
| Das Weglassen des [PT]-Flags in diesem Fall führt dazu, dass der Alias |
| ignoriert wird und ein 'Datei nicht gefunden'-Fehler zurückgegeben wird. |
| </p> |
| |
| <p>Das <code>PT</code>-Flag impliziert das <code>L</code>-Flag: |
| Die Umschreibung wird gestoppt, um die Anfrage an die |
| nächste Verarbeitungsphase weiterzuleiten.</p> |
| |
| <p>Beachten Sie, dass das <code>PT</code>-Flag in Verzeichniskontexten |
| wie <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>-Abschnitten |
| oder in <code>.htaccess</code>-Dateien impliziert ist. Die einzige |
| Möglichkeit, dies zu umgehen, ist die Umschreibung zu <code>-</code>.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_qsa">QSA|qsappend <a title="Permanent link" href="#flag_qsa" class="permalink">¶</a></h2> |
| <p> |
| Wenn der Ersetzungs-URI einen Query-String enthält, ist das Standardverhalten |
| von <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, den vorhandenen |
| Query-String zu verwerfen und durch den neu generierten zu ersetzen. |
| Die Verwendung des [QSA]-Flags bewirkt, dass die Query-Strings kombiniert |
| werden. |
| </p> |
| |
| <p>Betrachten Sie die folgende Regel:</p> |
| |
| <pre class="prettyprint lang-config">RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]</pre> |
| |
| |
| <p>Mit dem [QSA]-Flag wird eine Anfrage für <code>/pages/123?one=two</code> |
| auf <code>/page.php?page=123&one=two</code> abgebildet. Ohne das |
| [QSA]-Flag wird dieselbe Anfrage auf <code>/page.php?page=123</code> |
| abgebildet - das heißt, der vorhandene Query-String wird verworfen. |
| </p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_qsd">QSD|qsdiscard <a title="Permanent link" href="#flag_qsd" class="permalink">¶</a></h2> |
| <p> |
| Wenn der angeforderte URI einen Query-String enthält und der Ziel-URI |
| nicht, ist das Standardverhalten von <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, diesen Query-String in den |
| Ziel-URI zu kopieren. Die Verwendung des [QSD]-Flags bewirkt, dass der |
| Query-String verworfen wird. |
| </p> |
| |
| <p>Dieses Flag ist ab Version 2.4.0 verfügbar.</p> |
| |
| <p> |
| Die gemeinsame Verwendung von [QSD] und [QSA] führt dazu, dass [QSD] |
| Vorrang hat. |
| </p> |
| |
| <p> |
| Wenn der Ziel-URI einen Query-String hat, wird das Standardverhalten |
| beobachtet - das heißt, der ursprüngliche Query-String wird verworfen und |
| durch den Query-String im <code>RewriteRule</code>-Ziel-URI ersetzt. |
| </p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_qsl">QSL|qslast <a title="Permanent link" href="#flag_qsl" class="permalink">¶</a></h2> |
| <p> |
| Standardmäßig trennt das erste (linkeste) Fragezeichen in der Ersetzung |
| den Pfad vom Query-String. Die Verwendung des [QSL]-Flags weist |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> an, stattdessen |
| die beiden Komponenten beim letzten (rechtesten) Fragezeichen zu trennen. |
| </p> |
| |
| <p> |
| Dies ist nützlich bei der Zuordnung zu Dateien, die literale Fragezeichen |
| in ihrem Dateinamen haben. Wenn kein Query-String in der Ersetzung |
| verwendet wird, kann ein Fragezeichen in Kombination mit diesem Flag |
| angehängt werden. |
| </p> |
| |
| <p>Dieses Flag ist ab Version 2.4.19 verfügbar.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_r">R|redirect <a title="Permanent link" href="#flag_r" class="permalink">¶</a></h2> |
| <p> |
| Die Verwendung des [R]-Flags bewirkt, dass eine HTTP-Umleitung an den |
| Browser gesendet wird. Wenn eine vollqualifizierte URL angegeben wird |
| (das heißt, einschließlich <code>http://servername/</code>), wird eine |
| Umleitung an diesen Ort durchgeführt. Andernfalls werden das aktuelle |
| Protokoll, der Servername und die Portnummer verwendet, um die URL zu |
| generieren, die mit der Umleitung gesendet wird. |
| </p> |
| |
| <p> |
| <em>Jeder</em> gültige HTTP-Antwort-Statuscode kann angegeben werden, |
| mit der Syntax [R=305], wobei standardmäßig ein 302-Statuscode verwendet |
| wird, wenn keiner angegeben ist. Der angegebene Statuscode muss nicht |
| unbedingt ein Umleitungs-(3xx-)Statuscode sein. Wenn jedoch ein Statuscode |
| außerhalb des Umleitungsbereichs (300-399) liegt, wird der |
| Ersetzungsstring vollständig verworfen und die Umschreibung gestoppt, |
| als ob <code>L</code> verwendet worden wäre.</p> |
| |
| <p>Zusätzlich zu Antwort-Statuscodes können Sie auch den Umleitungsstatus |
| mit ihren symbolischen Namen angeben: <code>temp</code> (Standard), |
| <code>permanent</code> oder <code>seeother</code>.</p> |
| |
| <p> |
| Sie werden fast immer [R] in Verbindung mit [L] verwenden wollen (also |
| [R,L]), da das [R]-Flag allein <code>http://thishost[:thisport]</code> dem |
| URI voranstellt, dies aber dann an die nächste Regel im Regelsatz |
| weitergibt, was häufig zu 'Ungültiger URI in Anfrage'-Warnungen führen kann. |
| </p> |
| |
| <p>Hinweis: httpd unterstützt nur Statuscodes, die in der HTTP-Spezifikation |
| enthalten sind. Die Verwendung eines nicht erkannten Statuscodes führt zu |
| einem 500-Fehler und einer Fehlermeldung im Fehlerprotokoll.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_s">S|skip <a title="Permanent link" href="#flag_s" class="permalink">¶</a></h2> |
| <p>Das [S]-Flag wird verwendet, um Regeln zu überspringen, die Sie nicht |
| ausführen möchten. Die Syntax des Skip-Flags ist [S=<em>N</em>], wobei |
| <em>N</em> die Anzahl der zu überspringenden Regeln angibt (vorausgesetzt, |
| die <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> und alle |
| vorhergehenden <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>-Direktiven |
| stimmen überein). Dies kann als <code>goto</code>-Anweisung in Ihrem |
| Umschreibungsregelsatz betrachtet werden. Im folgenden Beispiel möchten |
| wir die <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> nur |
| ausführen, wenn der angeforderte URI keiner tatsächlichen Datei entspricht.</p> |
| |
| <pre class="prettyprint lang-config"># Ist die Anfrage für eine nicht existierende Datei? |
| RewriteCond "%{REQUEST_FILENAME}" !-f |
| RewriteCond "%{REQUEST_FILENAME}" !-d |
| # Falls ja, überspringe diese zwei RewriteRules |
| RewriteRule ".?" "-" [S=2] |
| |
| RewriteRule "(.*\.gif)" "images.php?$1" |
| RewriteRule "(.*\.html)" "docs.php?$1"</pre> |
| |
| |
| <p>Diese Technik ist nützlich, weil eine <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> nur auf die unmittelbar |
| darauf folgende <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> |
| angewendet wird. Wenn Sie also eine <code>RewriteCond</code> auf mehrere |
| <code>RewriteRule</code>s anwenden möchten, besteht eine Möglichkeit darin, |
| diese Bedingungen zu negieren und eine <code>RewriteRule</code> mit einem |
| [Skip]-Flag hinzuzufügen. Sie können damit Pseudo-if-then-else-Konstrukte |
| erstellen: Die letzte Regel der then-Klausel wird zu |
| <code>skip=N</code>, wobei N die Anzahl der Regeln in der |
| else-Klausel ist:</p> |
| <pre class="prettyprint lang-config"># Existiert die Datei? |
| RewriteCond "%{REQUEST_FILENAME}" !-f |
| RewriteCond "%{REQUEST_FILENAME}" !-d |
| # Erstelle ein if-then-else-Konstrukt, indem 3 Zeilen übersprungen werden, wenn wir zur "else"-Klausel wollten. |
| RewriteRule ".?" "-" [S=3] |
| |
| # WENN die Datei existiert, dann: |
| RewriteRule "(.*\.gif)" "images.php?$1" |
| RewriteRule "(.*\.html)" "docs.php?$1" |
| # Überspringe die "else"-Klausel. |
| RewriteRule ".?" "-" [S=1] |
| # SONST... |
| RewriteRule "(.*)" "404.php?file=$1" |
| # ENDE</pre> |
| |
| |
| <p>Es ist wahrscheinlich einfacher, diese Art der Konfiguration mit den |
| Direktiven <code class="directive"><If></code>, <code class="directive"><ElseIf></code> und <code class="directive"><Else></code> zu erreichen.</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_t">T|type <a title="Permanent link" href="#flag_t" class="permalink">¶</a></h2> |
| <p>Setzt den MIME-Typ, mit dem die resultierende Antwort gesendet wird. |
| Dies hat denselben Effekt wie die <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>-Direktive.</p> |
| |
| <p>Sie könnten beispielsweise die folgende Technik verwenden, um |
| Perl-Quellcode als Klartext bereitzustellen, wenn er auf eine bestimmte |
| Weise angefordert wird:</p> |
| |
| <pre class="prettyprint lang-config"># .pl-Dateien als Klartext bereitstellen |
| RewriteRule "\.pl$" "-" [T=text/plain]</pre> |
| |
| |
| <p>Oder wenn Sie eine Kamera haben, die JPEG-Bilder ohne Dateiendungen |
| produziert, könnten Sie erzwingen, dass diese Bilder mit dem korrekten |
| MIME-Typ bereitgestellt werden, basierend auf ihren Dateinamen:</p> |
| |
| <pre class="prettyprint lang-config"># Dateien mit 'IMG' im Namen sind jpg-Bilder. |
| RewriteRule "IMG" "-" [T=image/jpg]</pre> |
| |
| |
| <p>Bitte beachten Sie, dass dies ein triviales Beispiel ist und besser mit |
| <code class="directive"><a href="../mod/core.html#filesmatch"><FilesMatch></a></code> gelöst werden |
| könnte. Berücksichtigen Sie immer die alternativen Lösungen für ein Problem, |
| bevor Sie auf Umschreibung zurückgreifen, die stets eine weniger |
| effiziente Lösung darstellt als die Alternativen.</p> |
| |
| <p> |
| Bei Verwendung im Verzeichniskontext verwenden Sie nur <code>-</code> (Bindestrich) |
| als Ersetzung <em>für die gesamte Runde der <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung</em>, |
| da sonst der mit diesem Flag gesetzte MIME-Typ durch eine interne |
| Neuverarbeitung verloren geht (einschließlich nachfolgender Runden der |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung). Das <code>L</code>-Flag kann in |
| diesem Kontext nützlich sein, um die <em>aktuelle</em> Runde der |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Verarbeitung zu beenden.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_unsafe_allow_3f">UnsafeAllow3F <a title="Permanent link" href="#flag_unsafe_allow_3f" class="permalink">¶</a></h2> |
| <p>Das Setzen dieses Flags ist erforderlich, um eine Umschreibung |
| fortzusetzen, wenn die zu schreibende HTTP-Anfrage ein kodiertes |
| Fragezeichen '%3f' enthält und das umgeschriebene Ergebnis ein '?' in |
| der Ersetzung hat. Dies schützt vor einer bösartigen URL, die eine |
| Erfassung und Neuersetzung des kodierten Fragezeichens ausnutzt.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_unsafe_prefix_stat">UnsafePrefixStat <a title="Permanent link" href="#flag_unsafe_prefix_stat" class="permalink">¶</a></h2> |
| <p>Das Setzen dieses Flags ist erforderlich bei Server-Kontext-Ersetzungen, |
| die mit einer Variable oder Rückreferenz beginnen und zu einem |
| Dateisystempfad aufgelöst werden. Diesen Ersetzungen wird nicht das |
| Document Root vorangestellt. Dies schützt vor einer bösartigen URL, |
| die die expandierte Ersetzung auf einen unerwarteten |
| Dateisystemstandort abbilden lässt.</p> |
| |
| <p>Available in Apache HTTP Server 2.5.1 and later.</p> |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="flag_unc">UNC <a title="Permanent link" href="#flag_unc" class="permalink">¶</a></h2> |
| <p>Das Setzen dieses Flags verhindert das Zusammenführen mehrerer |
| führender Schrägstriche, wie sie in Windows-UNC-Pfaden verwendet werden. |
| Das Flag ist nicht erforderlich, wenn die Regelersetzung mit mehreren |
| literalen Schrägstrichen beginnt.</p> |
| |
| <p>Available in Apache HTTP Server 2.5.1 and later.</p> |
| </div></div> |
| <div class="bottomlang"> |
| <p><span>Verfügbare Sprachen: </span><a href="../de/rewrite/flags.html" title="Deutsch"> de </a> | |
| <a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </a> | |
| <a href="../es/rewrite/flags.html" hreflang="es" rel="alternate" title="Español"> es </a> | |
| <a href="../fr/rewrite/flags.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | |
| <a href="../ja/rewrite/flags.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | |
| <a href="../ko/rewrite/flags.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | |
| <a href="../tr/rewrite/flags.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | |
| <a href="../zh-cn/rewrite/flags.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> |