mod-rewrite
Kontexte der Regeln zum Umschreiben
Suche…
Bemerkungen
In diesem Thema werden die beiden Kontexte beschrieben, in denen RewriteRule
verwendet werden kann. In Beispielen, in denen RewriteEngine on
, wird davon ausgegangen, dass diese Anweisung vor diesem Beispiel aufgetreten ist.
Umschreiben von Regeln in pro-Verzeichnis-Kontext
Der Kontext pro Verzeichnis ist Teil der statischen Konfigurationsdatei zwischen den Tags <Directory>
und </Directory>
. Der gesamte Inhalt der dynamischen Konfigurationsdateien befindet sich im Kontext des Verzeichnisses des Ordners, in dem sich der .htaccess befindet.
RewriteRule
's im pro-Verzeichnis-Kontext RewriteRule
dem Teil einer URL nach Protokoll, Hostname, Port und Präfix des Verzeichnisses, in dem sie sich befinden, und vor der RewriteRule
.
In der statischen Konfigurationsdatei
Wenn die folgende Regel für die URL http://example.com/foo?id=1
, wird die Regex im ersten Argument von RewriteRule
mit foo
abgeglichen. Das Protokoll ( http
), der Hostname ( example.com
) und das Präfix für dieses Verzeichnis ( /
) werden entfernt. Am anderen Ende wird auch die Abfragezeichenfolge ( ?id=1
) entfernt.
<Directory "/">
RewriteRule ^foo$ bar [L]
</Directory>
Im folgenden Beispiel würde unter Verwendung der URL http://example.com/topic/15-my-topic-name
das erste Argument von RewriteRule
mit topic/15-my-topic-name
abgeglichen:
<Directory "/topic/">
RewriteRule ^topic/([0-9]+)-[^/]*/?$ topics.php?id=$1 [L]
</Directory>
In der dynamischen Konfigurationsdatei
Wenn die folgende Regel in einer .htaccess
Datei im Ordner "www-root" abgelegt und dann für die URL http://example.com/foo?id=1
, wird die erste Regex mit foo
abgeglichen.
RewriteRule ^foo$ bar [L]
Im Kontext eines Verzeichnisses beginnt die übereinstimmende URL niemals mit einem
/
. In einem solchen Kontext wird eine Direktive, die mitRewriteRule ^/
, niemals mit irgendetwas übereinstimmen.
Regeln im virtuellen Host umschreiben
Der virtuelle Host-Kontext ist Teil der statischen Konfigurationsdatei zwischen den Tags <VirtualHost>
und </VirtualHost>
.
RewriteRule
's im virtuellen RewriteRule
dem Teil einer URL nach Protokoll, Hostname und Port und vor der RewriteRule
überein.
Wenn die folgende Regel für die URL http://example.com/foo?id=1
, wird die Regex im ersten Argument von RewriteRule
mit /foo
abgeglichen.
<VirtualHost 1.2.3.4:80>
ServerName example.com
RewriteEngine on
RewriteRule ^/foo$ /bar [L]
</VirtualHost>