SELFHTML

Umleitungen mit mod_rewrite

Informationsseite

nach unten Allgemeines - URLs manipulieren mit mod_rewrite
nach unten RewriteBase - Basis für eine Umleitung definieren
nach unten RewriteCond - Bedingung für eine Umleitung definieren
nach unten RewriteEngine - mod_rewrite ein- und ausschalten
nach unten RewriteLog - Log-Datei für mod_rewrite bestimmen
nach unten RewriteLogLevel - Art der Log-Meldungen bestimmen
nach unten RewriteRule - Umleitungen bestimmen

 nach unten 

Allgemeines - URLs manipulieren mit mod_rewrite

mod_rewrite ist ein Modul, das Sie mit Hilfe der LoadModule-Anweisung in Ihrer Seite httpd.conf aktivieren können. Mit diesem Modul sind Sie in der Lage, URLs einfach zu manipulieren. Das heißt, ein Besucher, der eine von Ihrem Server verwaltete URL aufruft, kann beispielsweise automatisch auf eine andere Adresse umgeleitet werden. Um solche Umleitungen zu realisieren, stellt Ihnen mod_rewrite eine Reihe von Anweisungen zur Verfügung, die im folgenden kurz erläutert werden sollen. Sie können solche Regeln an unterschiedlichen Stellen notieren, beispielsweise in einem Seite Directory-Container innerhalb Ihrer httpd.conf, in einem Seite VirtualHost-Abschnitt oder aber innerhalb einer Seite .htaccess-Datei. Von dieser letzten Möglichkeit wird zunehmend Gebrauch gemacht, da immer mehr Provider ihren Kunden den Einsatz solcher Dateien gestatten.

Die Apache-Entwickler selbst betonen, dass mod_rewrite ein "mächtiger Killer" sei: "Mit mod_rewrite schießen Sie sich beim ersten Gebrauch entweder selbst in den Fuß und wollen es dann nie wieder verwenden, oder aber Sie lernen es wegen seiner Power lieben und wollen es Ihr ganzes weiteres Leben nicht mehr missen" (siehe englischsprachige Seite URL Rewriting Guide).

Beispiel:

RewriteEngine on
RewriteRule (.*).html$ /cgi-bin/script.pl?var=$1

Das Beispiel bewirkt, dass alle Zugriffe auf .html-Dateien im Basis-Verzeichnis des Webservers auf ein Script umgeleitet werden, wobei der Name der aufgerufenen Datei als Parameter übergeben wird.

Grundsätzlich benötigt man für URL-Manipulationen nur die nach unten RewriteRule-Direktive. Allerdings muss einmal mit nach unten Rewrite Engine mod_rewrite eingeschaltet werden. Obwohl es bei den meisten Direktiven egal ist, ob Sie diese in einer Server-Konfigurationsdatei wie die httpd.conf oder in einer Seite .htaccess-Datei verwenden, sollten Sie, um Performance-Einbußen zu vermeiden, diese in der Server-Konfiguration verwenden, falls Ihnen das erlaubt ist. Einige Optionen verursachen ähnliche Probleme, weshalb Sie alle Optionen nur mit Bedacht benutzen sollten.

 nach obennach unten 

RewriteBase - Basis für eine Umleitung definieren

Diese Regel darf an folgenden Stellen der Apache-Konfiguration notiert werden: Seite Directory-Container, .htaccess

Sie benötigen RewriteBase, wenn das Verzeichnis, in dem die Umleitung stattfindet, nicht über Ihren eigentlichen (physischen) Namen erreichbar ist (beispielsweise, wenn man einen Alias auf das Verzeichnis gesetzt hat). Sie müssen mod_rewrite dann mitteilen, wie das Verzeichnis erreichbar ist.

Beispiel:

RewriteEngine on

#
# die Datei liegt im Verzeichnis /abc/def
# erreichbar ist dieses Verzeichnis aber über /xyz
# bspw. weil in der httpd.conf folgendes gesetzt wurde:
# Alias /xyz /abc/def
#

RewriteBase /xyz
RewriteRule ^(.*).htm$ $1.html # macht alle *.html auch als *.htm erreichbar

Erläuterung:

Da das physische Verzeichnis /abc/def nicht darüber aufgerufen wird, würde, wenn man keine RewriteBase angibt, die RewriteRule nicht funktionieren. Durch diese Angabe macht man mod_rewrite den passenden Alias bekannt.

 nach obennach unten 

RewriteCond - Bedingung für eine Umleitung definieren

Diese Regel darf an folgenden Stellen der Apache-Konfiguration notiert werden: Serverkonfiguration allgemein, Seite VirtualHost, Seite Directory-Container, .htaccess.

RewriteCond beschreibt eine Bedingung, die erfüllt sein muss, damit die RewriteRule ausgeführt wird.

Erwartet als Parameter:

  1. Test-String - eine Zeichenkette, die überprüft werden soll
  2. Bedingung - beschreibt die Überprüfung, die auf Test-String angewendet werden soll
  3. [flags] - Zusätzliche Optionen (optional)

Test-String

Test-String ist eine Zeichenkette, die neben gewöhnlichem Text auch folgende Konstrukte beinhalten kann:

Nr. Test-String Erklärung
1. $1 Mit $N (1 <= N <= 9) kann man auf zwischengespeicherte Werte der aktuellen RewriteRule-Direktive zugreifen
2. %2 Mit %N (1 <= N <= 9) kann man auf zwischengespeicherte Werte der letzten RewriteCond-Direktive zugreifen

Bedingung

Bedingung beschreibt die Bedingung, die auf den Test-String zutreffen muss. Bedingung ist ein Perl-kompatibler Seite Regulärer Ausdruck (ohne Begrenzerzeichen, '/'). Alternativ können folgende Erweiterungen benutzt werden:

Nr. Bedingung Erklärung
1. <Vergleichsstring Der Test-String ist im Alphabet vor dem Vergleichsstring
2. >Vergleichsstring Der Test-String ist im Alphabet nach dem Vergleichsstring
3. =Vergleichsstring Test-String und Vergleichsstring werden auf Gleichheit überprüft. Wenn der Vergleichsstring "" ist, wird geprüft, ob der Test-String leer ist
4. -d Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es ein Verzeichnis ist (d: directory, Verzeichnis)
5. -f Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine reguläre Datei ist (f: file, Datei)
6. -s Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine reguläre Datei mit einen Inhalt größer als 0 ist (s: size, Größe)
7. -l Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es ein symbolischer Link ist (l: link, Verknüpfung)
8. -F Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine Datei ist und diese zugänglich ist (inklusive Zugangskontrollen, z.B. mit Seite .htaccess)
9. -U Es wird überprüft, ob Test-String eine gültige URL ist (inklusive Zugangskontrollen, z.B. mit Seite .htaccess)

Beachten Sie:

Allen diesen Ausdrücken kann ein Ausrufezeichen (!) vorangestellt werden, um die Ausdrücke zu verneinen. Bei den Beispielen (8.-9.) wird ein interner Aufruf auf diese Datei gestartet, deshalb verschlechtern diese Optionen die Server-Performance sehr stark.

Flags

Die Angabe von flags ist optional. Damit kann man das Verhalten der RewriteCond beeinflussen. Erlaubt sind folgende Werte:

Nr. flag Alternative Erklärung
1. NC nocase Bei String-Vergleichen wird nicht mehr zwischen Groß- und Kleinschreibung unterschieden
2. OR ornext Mit diesem Flag wird die aktuelle Bedingung mit einem logischen ODER mit der nächsten Bedingung verknüpft (Standard ist eine UND-Verknüpfung), das heißt, es braucht nur eine der beiden Bedingungen zuzutreffen.

Beachten Sie:

Sie können mehrere Flags verwenden, indem Sie diese mit einem Komma (,) trennen.

 nach obennach unten 

RewriteEngine - mod_rewrite ein- und ausschalten

Diese Regel darf an folgenden Stellen der Apache-Konfiguration notiert werden: Serverkonfiguration allgemein, Seite VirtualHost, Seite Directory-Container, .htaccess.

Mit dieser Direktive schalten Sie mod_rewrite ein. Wenn Sie RewriteEngine auf off stellen, können Sie mod_rewrite nicht benutzen.

Beispiel:

RewriteEngine on

Erläuterung:

Mit dieser Zeile wird der Webserver angewiesen, mod_rewrite einzuschalten.

 nach obennach unten 

RewriteLog - Log-Datei für mod_rewrite bestimmen

Diese Regel darf an folgenden Stellen der Apache-Konfiguration notiert werden: Serverkonfiguration allgemein, Seite VirtualHost, aber nicht in Seite Directory-Containern und .htaccess.

Mit RewriteLog setzen Sie den Namen der Datei, in die mod_rewrite seine Logmeldungen schreibt. Wenn Dateipfad nicht mit einem "/" beginnt, dann wird die Datei relativ zu der Umgebungsvariable ServerRoot gesucht. Diese Anweisung sollte nur einmal in der Server-Konfiguration notiert werden.

Sicherheitshinweis:

Sorgen Sie dafür, dass das Verzeichnis, in dem die Log-Datei liegt, nur vom Benutzer, der den Server startet, beschrieben werden kann. Die englischsprachige Seite Apache Security Tips geben Ihnen dazu Hinweise.

 nach obennach unten 

RewriteLogLevel - Art der Log-Meldungen bestimmen

Diese Regel darf an folgenden Stellen der Apache-Konfiguration notiert werden: Serverkonfiguration allgemein, Seite VirtualHost, aber nicht in Seite Directory-Containern und .htaccess.

Mit dieser Direktive können Sie angeben, welche Aktionen mod_rewrite protokolliert. Erlaubte Werte für Log-Level sind natürliche Zahlen. Standardmäßig ist RewriteLogLevel auf 0 eingestellt, was bewirkt, dass Apache keine Aktionen von mod_rewrite protokolliert. Ein Wert von 1 bedeutet, dass nur sehr signifikante Meldungen protokolliert werden. Je höher der Wert, desto mehr Meldungen werden ins Protokoll aufgenommen.

Beispiel:

RewriteLog "/var/www/mod_rewrite.log"
RewriteLogLevel 2

Erläuterung:

Bei diesem Beispiel wird mod_rewrite angewiesen, Log-Meldungen in die Datei "/var/www/mod_rewrite.log" zu schreiben. Weiterhin wird festgelegt, welche Meldungen protokolliert werden.

Beachten Sie:

Benutzen Sie Werte für Log-Level größer als 2 nur für Debugging-Zwecke, da es den Apache deutlich verlangsamt.

 nach obennach unten 

RewriteRule - Umleitungen bestimmen

RewriteRule definiert die eigentliche Umleitung. Sie kann mehrmals vorkommen, dabei ergibt jedes Vorkommnis eine eigene Umleitung. Die Reihenfolge der Umleitungen ist wichtig, da diese in der Reihenfolge ihres Vorkommens angewendet werden.

Erwartet als Parameter:

  1. Ausdruck - beschreibt die URLs, die umgeleitet werden sollen
  2. Umleitung - gibt die Umleitung an

Ausdruck

Ausdruck beschreibt die URLs, die umgeleitet werden. Es ist ein Perl-kompatibler Seite Regulärer Ausdruck (ohne Begrenzerzeichen, '/'). Vor dem Ausdruck kann zusätzlich ein Ausrufezeichen ('!') stehen, um den Regulären Ausdruck zu negieren.

Umleitung

Umleitung ist die URL, auf die umgeleitet wird, wenn der Ausdruck zutrifft. Neben normalem Text können Sie die gleichen Ausdrücke verwenden, die Sie auch in Test-Strings von nach unten RewriteCond-Direktiven benutzen können. Wenn Sie auf Server-Ebene konfigurieren, dann wird die komplette URL ersetzt, auf Verzeichnis-Ebene (in .htaccess bzw. in einem Directory-Container in der zentralen Apache-Konfiguration) wird nur der Pfad ab dem aktuellen Verzeichnis ersetzt. Es werden danach noch alle weiteren RewriteRule-Direktiven abgearbeitet, so dass sich die URL nochmals ändern kann. Wenn Sie für Umleitung den String - angeben, dann wird keine Ersetzung durchgeführt.

Am Ende der RewriteRule können Sie noch optional einige weitere Optionen angeben, welche das Verhalten von mod_rewrite steuern, falls die RewriteRule zutrifft. Diese werden in spitzen Klammern ([ bzw. ]) notiert. Wenn Sie mehrere angeben, trennenen Sie diese durch Kommata. Folgende Optionen können Sie angeben:

Nr. Option Alternative Erklärung
1. redirect R Apache wird angewiesen, eine externe Umleitung mit dem Seite HTTP-Statuscode 302 durchzuführen. Wollen Sie einen anderen Statuscode senden, dann geben Sie ihn nach einem Gleichheitszeichen nach diesem Flag an. Es gibt einige vordefinierte Namen für einige Statuscode: temp (302, MOVED TEMPORARILY), permanent (301, MOVED PERMANENTLY) und seeother (303, See Other).
2. forbidden F Sendet sofort den Seite HTTP-Statuscode 403 (FORBIDDEN) an den Browser.
3. gone G Sendet sofort den Seite HTTP-Statuscode 410 (GONE) an den Browser und markiert diese Seite damit als nicht mehr vorhanden..
4. last L Wenn Sie diese Option angeben, wird nach dieser RewriteRule keine weitere mehr ausgeführt.
5. next N Bewirkt, dass die Abbarbeitung der RewriteRule-Direktiven abgebrochen und nochmals gestartet wird. Achten Sie darauf, dass Sie mit dieser Regel keine Endlos-Schleifen erzeugen.
6. chain C Bewirkt, dass die nächste RewriteRule nur ausgewertet wird, falls die aktuelle Regel zutrifft.
7. type= T= Mit dieser Option können Sie einen bestimmten Seite MIME-Typen bestimmen.
8. nosubreq NS Diese Option bewirkt, dass die Regel übersprungen wird, falls der aktuelle Request ein Sub-Request ist.
9. nocase NC Bewirkt, dass bei der Überprüfung auf Gleichheit des Ausdrucks und der URL nicht auf Groß- und Kleinschreibung geachtet wird.
10. qsappend QSA Diese Option müssen Sie angeben, wenn Sie an die Umleitung manuell einen neuen Query-String hängen und den alten dabei nicht komplett ersetzen wollen.
11. noescape NE Standardmäßig werden bestimmte Sonderzeichen von mod_rewrite maskiert. Mit dieser Option schalten Sie dies aus.
12. skip=N S=N Mit dieser Option können Sie die nächsten N RewriteRule-Direktiven überspringen
13. env=VAR:VAL E=VAR:VAL Mit dieser Option können Sie eine Umgebungsvariable erzeugen, hier etwa die Variable VAR mit dem Wert VAL.
14. cookie=NAME:VAL:domain[:lifetime[:path]] CO= Mit dieser Option setzen Sie ein Cookie namens NAME mit dem Wert VAL und Domain als domain. Optional sind die Argumente lifetime (Lebenszeit in Minuten) und path (Pfad des Cookies).
15. proxy P Diese Option sorgt dafür, dass ein Zugriff von dem Apache-Modul mod_proxy auf die URL getan wird. Dazu muss mod_proxy aktiviert sein und die URL muss valide sein (sie muss unter anderem auf jeden Fall mit http://hostname beginnen).
16. passthrough PT Benutzen Sie diese Option, wenn Sie mehrere URL->Dateinamen-Übersetzer (wie etwa mod_alias und mod_rewrite) zusammen benutzen.
 
 nach oben
weiter Seite Andere Webserver
zurück Seite .htaccess - Server-Reaktionen kontrollieren
 

© 2005 Seite Impressum