Schlagwort-Archiv Apache

mod_rewrite – Apache Servermodul

mod_rewrite ist ein Modul für den Webserver Apache ab Version 1.3

Was ist mod_rewrite?
mod_rewrite dient zur Manipulation und Weiterleitung von URLs. mod_rewrite beruht auf der Programmiersprache Perl.

Wer muss sich mit diesem Modul auseinandersetzen?
mod_rewrite ist vor allem wichtig für diejenigen, die einen Webserver auf Basis von Apache aufbauen wollen. Wer nur eine einfache Homepage erstellen möchte, der muss sich über dieses Modul bestimmt nicht den Kopf zerbrechen. Zudem können moderne Content Management Systeme (CMS) mit dem Modul mod_rewrite umgehen und erleichtern zudem das Leben eines Webmasters ungemein, wenn es um die Gestaltung komplexer Seiten geht.

Was kann mod_rewrite?
mod_rewrite ermöglicht die Manipulation von URLs durch Regeln, die in einem Verzeichnis-Container oder einem virtuellen Rechner innerhalb der zentralen Konfigurationsdatei httpd.conf definiert werden können. Wahlweise können Regeln auch in der Datei .htaccess hinterlegt werden. Letztere Methode ist wohl die gebräuchlichste, insbesondere da die gen. Datei bei den meisten Providern jedem Kunden zur Verfügung steht. Wer selbst über einen Webserver verfügt, dem ist aus Gründen der Performance allerdings zu raten, Direktiven in httpd.conf vorzunehmen.

Achtung! mod_rewrite ist mit großer Vorsicht zu genießen! Dieses Modul bietet sehr viele Möglichkeiten, kann aber bei falscher Konfiguration dafür sorgen, dass man seine eigene Seite nicht mehr aufrufen bzw. anzeigen kann!

Sehen wir uns den Gebrauch von mod_rewrite einmal etwas näher an:

Um den Rewrite Engine zu aktivieren muss in der jeweiligen Konfigurationsdatei folgender Eintrag gesetzt werden: RewriteEngine on
Diese Anweisung muss immer ganz am Anfang einer Regel stehen und teilt mod_rewrite mit, daß eine Manipulation einer URL ansteht.

Die eigentliche Umleitung bestimmt die Direktive RewriteRule, die aus zwei Parametern besteht:
1. einem Ausdruck, der festlegt welche URLs umgeleitet bzw. manipuliert werden sollen und
2. die Definition der Umleitung
RewriteRule kann mehrmals in der Konfiguration vorkommen. Allerdings gilt hier: Umleitungen
von URLs werden der Reihe nach abgearbeitet!
Zusätzlich stehen verschiedene Optionen zur Verfügung, die auch kombiniert werden können.

Ein Beispiel dazu aus der Praxis:

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

Hier werden alle Dateien mit der Endung html dem Skript meinscript.pl übergeben und der Dateiname gleichzeitig als Parameter übermittelt.
RewriteRule ist der am meisten gebrauchte Befehl von mod_rewrite.
Aber es gibt noch andere sehr wichtige Anweisungen:
Die Anweisung RewriteBase
RewriteBase darf nur in einem Directory-Container innerhalb der Datei httpd.conf oder in .htaccess verwendet werden. RewriteBase ist zwingend erforderlich, wenn ein Verzeichnis nicht unter seinem physikalischen Namen von Apache erreichbar ist, z.B. durch Einträge eines Alias. Wird mit Alias gearbeitet, findet RewriteRule entsprechende Einträge von alleine nicht. RewriteBase schafft da Abhilfe:
Führen wir gen. obiges Beispiel weiter: Alle aufgerufenen Dateien mit Endung .html sollen an ein Skript namens meinscript.pl übergeben werden. Das physikalische Verzeichneis lautet /home/juergen/einsaetze/2011. Das gen. Directory wurde mit einem Alias /2011 zwecks schnellerem Auffindens beispielsweise in der Datei .htaccess versehen.
Die Anweisung RewriteRule hat jetzt ein echtes Problem und deren alleinige Anwendung würde nicht zum gewünschten Ergebnis führen. Hier kommt der Befehl RewriteBase ins Spiel:

//RewriteEngine on
//RewriteBase /2011
//RewriteRule (.*)\.html$ /cgi-bin/meinscript.pl?var=$1

Dies ist nur ein ganz kleiner Einblick in mod_rewrite, weitere Informationen bietet: http://www.apache.org