Mod rewrite

Aus VMS1 Tutorial

Wechseln zu: Navigation, Suche

Dieser Artikel bezieht sich auf das Apache Modul mod_rewrite, aber auch andere Webserver haben ähnliche Funktionen. mod_rewrite ermöglicht es, Anfragen (URLs) umzuschreiben, um bspw. "schönere" URLs nutzen zu können.

Beispiel

In diesem Wiki wird diese Möglichkeit genutzt, etwa um aus:

index.php?title=Hauptseite -> wiki/Hauptseite

für den Besucher zu machen. Das ist möglich, da die Mediawiki Software alle Links nach einem einstellbaren Schema generiert:

$wgArticlePath = "/wiki/$1";

Diese Variable zu setzen reicht dabei schon aus. In vielen anderen Skripten, bspw. auch im VMS, sind Links aber "fest" in den Dateien, insofern müsste man alle Dateien einzeln bearbeiten, um die Linkstruktur anzupassen.

Da der Server aber die Anfrage wiki/Hauptseite so interpretieren würde, dass er die Datei Hauptseite im Verzeichnis wiki ausliefern soll (welche es aber gar nicht gibt), muss ihm nun wiederrum mitgeteilt werden, dass er dies so auflöst:

wiki/Hauptseite -> index.php?title=Hauptseite

Jetzt kommt erst mod_rewrite ins Spiel:

RewriteEngine On
RewriteRule ^wiki/(.*)$ index.php?title=$1 [L,QSA]

Die erste Zeile sollte noch selbsterklärend sein. In den Regeln werden reguläre Ausdrücke benutzt, in diesem Fall wird jeder Pfad, der mit wiki/ beginnt, umgeschrieben. Der Ausdruck (.*) "sammelt" alle Zeichen danach, und macht diese dann als $1 für die Ersetzung verfügbar. Ersetzt wird dann mit index.php?title= und daran alles was nach dem wiki/ stand, angehängt.

In den []-Klammern stehen dann noch 2 Optionen (Flags). Das L bedeutet, dass nach dieser Regel keine Weitere mehr angewendet werden soll, QSA steht für "query string append" und weist das Modul an, sofern vorhanden, den Query String anzuhängen (?foo=bar&foo2=bar2 ....)

Diese Regeln können entweder für den gesamten Server in der httpd.conf Datei stehen, oder für einzelne Verzeichnis in .htaccess Dateien definiert werden.


Apache (v2.2) Modul: mod_rewrite (engl.)

Persönliche Werkzeuge