| <!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>Technische Details zu Apache 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>Technische Details zu Apache 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/tech.html" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/tech.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/tech.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/tech.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 einige der technischen Details von | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> und der URL-Zuordnung.</p> | |
| </div> | |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#InternalAPI">API-Phasen</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#InternalRuleset">Regelsatz-Verarbeitung</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="InternalAPI">API-Phasen <a title="Permanent link" href="#InternalAPI" class="permalink">¶</a></h2> | |
| <p>Der Apache HTTP Server bearbeitet Anfragen in mehreren Phasen. | |
| In jeder dieser Phasen können ein oder mehrere Module aufgerufen | |
| werden, um diesen Teil des Anfrage-Lebenszyklus zu behandeln. Zu | |
| den Phasen gehören Dinge wie URL-zu-Dateiname-Übersetzung, | |
| Authentifizierung, Autorisierung, Inhalt und Protokollierung. (Dies | |
| ist keine vollständige Liste.)</p> | |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> wirkt in zwei dieser Phasen (oder "Hooks", wie | |
| sie oft genannt werden), um zu beeinflussen, wie URLs umgeschrieben | |
| werden können.</p> | |
| <p>Erstens verwendet es den URL-zu-Dateiname-Übersetzungs-Hook, der | |
| nach dem Lesen der HTTP-Anfrage stattfindet, aber bevor eine | |
| Autorisierung beginnt. Zweitens verwendet es den Fixup-Hook, der | |
| nach den Autorisierungsphasen und nach dem Lesen der | |
| verzeichnisbezogenen Konfigurationsdateien | |
| (<code>.htaccess</code>-Dateien) stattfindet, aber bevor der | |
| Inhalts-Handler aufgerufen wird.</p> | |
| <p>Nachdem eine Anfrage eingegangen ist und ein entsprechender Server | |
| oder virtueller Host bestimmt wurde, beginnt die Umschreibungs-Engine | |
| mit der Verarbeitung aller <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>-Direktiven in der | |
| Server-Konfiguration. (d.h. in der Hauptserverkonfigurationsdatei und | |
| in <code class="directive"><a href="../mod/core.html#virtualhost"><Virtualhost></a></code>-Abschnitten.) | |
| Dies geschieht in der URL-zu-Dateiname-Phase.</p> | |
| <p>Einige Schritte später, nachdem die endgültigen Datenverzeichnisse | |
| gefunden wurden, werden die verzeichnisbezogenen | |
| Konfigurationsdirektiven (<code>.htaccess</code>-Dateien und | |
| <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>-Blöcke) | |
| angewendet. Dies geschieht in der Fixup-Phase.</p> | |
| <p>In jedem dieser Fälle schreibt <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> die | |
| <code>REQUEST_URI</code> entweder auf eine neue URL oder auf einen | |
| Dateinamen um.</p> | |
| <p>Im Verzeichniskontext (d.h. in <code>.htaccess</code>-Dateien und | |
| <code>Directory</code>-Blöcken) werden diese Regeln angewendet, | |
| nachdem eine URL bereits in einen Dateinamen übersetzt wurde. Aus | |
| diesem Grund ist der URL-Pfad, gegen den <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| zunächst die <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>-Direktiven | |
| abgleicht, der vollständige Dateisystempfad zum übersetzten | |
| Dateinamen, wobei der Pfad des aktuellen Verzeichnisses (einschließlich | |
| eines abschließenden Schrägstrichs) vom Anfang entfernt wurde.</p> | |
| <p>Zur Veranschaulichung: Wenn Regeln in /var/www/foo/.htaccess stehen | |
| und eine Anfrage für /foo/bar/baz verarbeitet wird, würde ein Ausdruck | |
| wie ^bar/baz$ übereinstimmen.</p> | |
| <p>Wenn eine Ersetzung im Verzeichniskontext vorgenommen wird, wird | |
| eine neue interne Unteranfrage mit der neuen URL ausgelöst, die die | |
| Verarbeitung der Anfragephasen neu startet. Wenn die Ersetzung ein | |
| relativer Pfad ist, bestimmt die | |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code>-Direktive | |
| das URL-Pfad-Präfix, das der Ersetzung vorangestellt wird. Im | |
| Verzeichniskontext muss darauf geachtet werden, Regeln zu erstellen, | |
| die letztendlich (in einer zukünftigen "Runde" der verzeichnisbezogenen | |
| Umschreibungsverarbeitung) keine Ersetzung durchführen, um Schleifen | |
| zu vermeiden. (Siehe <a href="https://cwiki.apache.org/confluence/display/httpd/RewriteLooping">RewriteLooping</a> | |
| für eine weitere Diskussion dieses Problems.)</p> | |
| <p>Aufgrund dieser weiteren Manipulation der URL im Verzeichniskontext | |
| müssen Sie Ihre Umschreibungsregeln in diesem Kontext anders | |
| gestalten. Insbesondere denken Sie daran, dass der führende | |
| Verzeichnispfad vom URL-Pfad abgeschnitten wird, den Ihre | |
| Umschreibungsregeln sehen. Betrachten Sie die folgenden Beispiele | |
| zur weiteren Verdeutlichung.</p> | |
| <table class="bordered"> | |
| <tr> | |
| <th>Ort der Regel</th> | |
| <th>Regel</th> | |
| </tr> | |
| <tr> | |
| <td>VirtualHost-Abschnitt</td> | |
| <td>RewriteRule "^/images/(.+)\.jpg" "/images/$1.gif"</td> | |
| </tr> | |
| <tr> | |
| <td>.htaccess-Datei im Document Root</td> | |
| <td>RewriteRule "^images/(.+)\.jpg" "images/$1.gif"</td> | |
| </tr> | |
| <tr> | |
| <td>.htaccess-Datei im images-Verzeichnis</td> | |
| <td>RewriteRule "^(.+)\.jpg" "$1.gif"</td> | |
| </tr> | |
| </table> | |
| <p>Für noch mehr Einblick, wie <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> URLs in | |
| verschiedenen Kontexten manipuliert, sollten Sie die | |
| <a href="../mod/mod_rewrite.html#logging">Protokolleinträge</a> | |
| konsultieren, die während der Umschreibung erstellt werden.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="InternalRuleset">Regelsatz-Verarbeitung <a title="Permanent link" href="#InternalRuleset" class="permalink">¶</a></h2> | |
| <p>Wenn <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> in diesen beiden API-Phasen | |
| ausgelöst wird, liest es die konfigurierten Regelsätze aus seiner | |
| Konfigurationsstruktur (die entweder beim Start für den | |
| Server-Kontext oder während des Verzeichnisdurchlaufs des | |
| Apache-Kerns für den Verzeichniskontext erstellt wurde). Dann wird | |
| die URL-Umschreibungs-Engine mit dem enthaltenen Regelsatz gestartet | |
| (eine oder mehrere Regeln zusammen mit ihren Bedingungen). Die | |
| Funktionsweise der URL-Umschreibungs-Engine ist für beide | |
| Konfigurationskontexte genau gleich. Nur die endgültige | |
| Ergebnisverarbeitung ist unterschiedlich.</p> | |
| <p>Die Reihenfolge der Regeln im Regelsatz ist wichtig, da die | |
| Umschreibungs-Engine sie in einer speziellen (und nicht sehr | |
| offensichtlichen) Reihenfolge verarbeitet. Die Regel lautet: | |
| Die Umschreibungs-Engine durchläuft den Regelsatz Regel für Regel | |
| (<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>-Direktiven) | |
| und wenn eine bestimmte Regel übereinstimmt, durchläuft sie optional | |
| die vorhandenen zugehörigen Bedingungen (<code>RewriteCond</code>-Direktiven). | |
| Aus historischen Gründen werden die Bedingungen zuerst angegeben, | |
| sodass der Kontrollfluss etwas umständlich ist. Siehe Abbildung 1 | |
| für weitere Details.</p> | |
| <p class="figure"> | |
| <img src="../images/rewrite_process_uri.png" alt="Ablauf der RewriteRule- und RewriteCond-Zuordnung"><br> | |
| <dfn>Abbildung 1:</dfn>Der Kontrollfluss durch den Umschreibungsregelsatz | |
| </p> | |
| <p>Zuerst wird die URL gegen das <em>Pattern</em> jeder Regel | |
| abgeglichen. Wenn es fehlschlägt, stoppt <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| sofort die Verarbeitung dieser Regel und fährt mit der nächsten Regel | |
| fort. Wenn das <em>Pattern</em> übereinstimmt, sucht | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> nach zugehörigen Regelbedingungen | |
| (RewriteCond-Direktiven, die in der Konfiguration unmittelbar über | |
| der RewriteRule stehen). Wenn keine vorhanden sind, ersetzt es die | |
| URL durch einen neuen Wert, der aus dem String <em>Substitution</em> | |
| konstruiert wird, und fährt mit seiner Regelschleife fort. Wenn | |
| jedoch Bedingungen vorhanden sind, startet es eine innere Schleife | |
| zur Verarbeitung dieser in der Reihenfolge, in der sie aufgeführt | |
| sind. Für Bedingungen ist die Logik anders: Wir gleichen kein | |
| Muster gegen die aktuelle URL ab. Stattdessen erstellen wir zuerst | |
| einen String <em>TestString</em> durch Expansion von Variablen, | |
| Rückreferenzen, Map-Nachschlagungen <em>usw.</em>, und dann | |
| versuchen wir, <em>CondPattern</em> dagegen abzugleichen. Wenn das | |
| Muster nicht übereinstimmt, schlägt die gesamte Menge von | |
| Bedingungen und die zugehörige Regel fehl. Wenn das Muster | |
| übereinstimmt, wird die nächste Bedingung verarbeitet, bis keine | |
| weiteren Bedingungen verfügbar sind. Wenn alle Bedingungen | |
| übereinstimmen, wird die Verarbeitung mit der Ersetzung der URL | |
| durch <em>Substitution</em> fortgesetzt.</p> | |
| </div></div> | |
| <div class="bottomlang"> | |
| <p><span>Verfügbare Sprachen: </span><a href="../de/rewrite/tech.html" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/tech.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/tech.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/tech.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> |