Das Apache mod_rewrite Modul

Das Modul mod_rewrite für den Apache Server dient dazu die angeforderte URL abzuwandeln. Mit der RewriteEngine des Apache-Webservers ist es nämlich möglich die angeforderte URL mithilfe von Regulären Ausdrücken anzupassen. Besonders Suchmaschinen nehmen dies dankbar an. Sie meiden Webseiten mit langen Parameterlisten wie

http://www.example.com/?link=bla&parameter2=2342342&color=black

Solche URLs können mit mod_rewrite intern beliebig umgesetzt werden. Die obige URL lässt sich so zum Beispiel auf

http://www.example.com/link/bla/sid/2342342/color/black

umwandeln. Auf der anderen Seite gibt es Stimmen die der Meinung sind man sollte bei der Suchmaschinenoptimierung auch tiefe Verzeichnisse in der URL vermeiden. Kein Problem, die URL lässt sich mittels mod rewrites Regulären Ausdrücken beliebig verändern. Der Benutzer bzw. die Suchmaschine bekommen von der internen Umleitung im Server nichts mit.

Im Folgenden gebe ich eine kleine Anleitung, wie man mod_rewrite auf seinen Server nutzt. Auf den meisten Servern ist mod_rewrite bereits vorinstalliert, viele Provider installieren das Modul auch gerne nach. Ist das bereits der Fall, so kann man mit Schritt 5 beginnen, ansonsten starten wir mit Schritt 1:

Schritt 1: Wir haben also unseren eigenen Server, der Apache läuft und mod_rewrite ist noch nicht installiert, zunächst sollten wir überprüfen ob wir die passende Bibliotheken auf dem System verfügbar haben. Das ist in den meisten Fällen der Fall. Wir überprüfen es dennoch indem wir uns in die Konsole einloggen und den Befehl find / -name mod_rewrite.so ausführen. Bei SuSe 9.1 wird diese Bibliothek (shared library, .so steht für shared object) im Verzeichnis /usr/lib/apache2/mod_rewrite.so gefunden. Ist dies der Fall gehe zu Schritt 2, ansonsten wird es schwieriger, man muss die Bibliothek erstmal irgendwo auftreiben.

Schritt 2:

Öffne die Datei /etc/sysconfig/apache2 und suche darin die Zeile APACHE_MODULES, dort fügt man am Ende einfach rewrite dazu:

Das sollte dann etwa so aussehen:

APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authn_dbm autoindex cgi dir env expires log_config mime negotiation setenvif ssl php5 perl python suexec rewrite

Schritt 3:

Eventuell ist noch das Anpassen der httpd.conf Datei gefragt. Diesen Schritt konnte ich bei meinem Webserver aber einfach weglassen. Wir finden die httpd.conf Datei mit dem Befehl "find / -name httpd.conf". Sucht in der Datei die auskommentierte Zeile in der das Apache Mod Rewrite Modul gestartet wird

“#LoadModule rewrite_module modules/mod_rewrite.so"

und entfernt die Raute davor. Ist die Zeile nicht vorhanden müsst ihr sie neu einfügen (natürlich ohne Raute ;) ). Achtet darauf, dass der Pfad zur mod_rewrite.so Datei so stimmt (in Schritt 1 haben wir den Pfad ermittelt).

Schritt 4:

Nun noch den Apache mit /etc/init.d/apache2 restart graceful neu starten. Das wars.

Schritt 5 - Funktionstest:

mod_rewrite sollte nun laufen. Man kann es auf einzelne Verzeichnisse anwenden wenn man eine .htaccess Datei in dem betreffenden Verzeichnis anlegt. Auf den ganzen Webauftritt wendet man es somit also an indem man sie in das Rootverzeichnis des Dokumentenverzeichnisses des Servers legt. Lege eine .htaccess-Datei an und schreibe darin testweise die Zeilen:

Options +FollowSymLinks

RewriteEngine On

und rufe das Verzeichnis mit dem Webbrowser auf, in welchem du die .htaccess-Datei angelegt hast. Erscheint ein 500, Internal Server Error, dann ist bei der Installation etwas schiefgelaufen. Keine Fehler bedeutet, dass alles geklappt hat. Die .htaccess-Datei kann nun um beliebige Befehle für mod_rewrite erweitert werden.

Probiere hierfür zum Beispiel:

RewriteEngine on

RewriteRule index.html index.php um mit der Eingabe von index.html im Browser auf die index.php geleitet zu werden. (Eine index.php muss hierfür natürlich auch im Verzeichnis vorhanden sein)

Schritt 6 - die Anwendung:

Wie Ihr bereits im Schritt 5 bemerkt habt, wird das Modul im jeweiligen Verzeichnis mit

RewriteEngine On

aktiviert.

Die Umschreiberegeln
Die Befehle für das Umschreiben der URLs werden in den darauf folgenden Zeilen eingetragen und sind wie folgt aufgebaut: Als erstes wird die Zeichenkette RewriteRule angeführt, gefolgt von dem Suchmuster (als “Regulärer Ausdruck”) und der Zeichenkette der das Suchmuster ersetzen soll. Nicht zu vergessen die Flags in eckigen Klammern.

Eine Rewriteregel sieht also so aus:
RewriteRule ^/diesedateirufichimbrowserauf\.html$ zudieserwirdgeleitet.php [NC]

Diese Regel bewirkt wie klar ersichtlich sein dürfte, dass jede Anfrage auf die Datei diesedateirufichimbrowserauf.html intern auf die Datei zudieserwirdgeleitet.php umgeleitet wird. Das Flag NC bedeutet “Not Casesensitiv”, die Anfrage reagiert also nicht auf Groß- und Kleinschreibung.

Bedingungen
Häufig wollen wir bestimmte Regeln nur unter bestimmten Bedingungen ausführen. Hierfür haben sich die Entwickler des Moduls die Rewrite Bedingungen ausgedacht. Sie werden vor der Rewrite Regel notiert.

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?meinedomain\.de(/.*)?$ [NC]
RewriteRule \.(gif|jpg|GIF|JPG)$ http://www.meinedomain.de/boeserdieb.jpg [R,L]

Diese Rewrite Bedingung führt dazu, dass fremde Webseiten Bilder von meiner Webseite nicht direkt bei sich einbinden können. Dieser sogenannte Trafficklau wird dadurch verhindert. Das Ausrufezeichen vor dem Domainnamen hinter der Rewrite Condition steht nämlich für ein logisches Nicht und bedeutet, dass alle Bilder auf meinem Server, die von einer anderen Domain aufgerufen wurden auf die Ersatzgrafik boeserdieb.jpg geleitet werden. Das echte Bild bekommen die Besucher der Webseite des Diebes nicht zu gesicht.

Weitere Beispiele findet man auf modrewrite.de. Wer mit dieser Anleitung das Modul nicht zum Laufen bekommen sollte, kann es mal mit diesem Tutorial aus davidscorner probieren, welches ich im Laufe meiner Recherchen für diese Anleitung gefunden habe.

Da es sich bei den Anweisungen für mod rewrite um Reguläre Ausdrücke handelt, weiße ich in diesem Zusammenhang auch noch auf den Artikel zu Reguläre Ausdrücken hin: Reguläre Ausdrücke einfach validieren.

Viel Spaß beim rewriten!

Tags » , «


Artikel geschrieben am: 12. June 2008 11:56 in Schweinfurt
Optionen: Trackback-URL | Artikel kommentieren

Weitere Artikel in diesem Themengebiet: Webentwicklung

2 Kommentare

  1. 1

    Sehr gelungene Zusammenfassung und das Beste ich konnte endlich SUSE 11.0 dazu bringen das mod_rewrite wieder einzubinden. Was bei mir einfach überhaupt nicht funktionieren wollte, war das Laden des Moduls in der httpd.conf mit anzugeben. Jeder erdenkliche Versuch endete damit, dass sich der Apache nicht mehr starten ließ. In meiner Verzweiflung habe ich sogar versucht die;

    /etc/apache2/sysconfig.d/loadmodule.conf

    händisch anzupassen obwohl ja ganz eindeutig darauf hingewiesen wird, dass man das nicht tun soll. Hatte aber auch nichts gebracht erst der Eintrag in;

    /etc/sysconfig/apache2

    hat jetzt endlich dazu geführt, dass mod_rewrite mit eingebunden wird

  2. 2

    Danke für die Rückmeldung und das Lob. Deinen Kommentar hat mein Anti-Spammodul leider herausgefiltert und ich bin jetzt erst zufällig darauf gestoßen.

Hat Ihnen der Artikel geholfen? Kommentar schreiben:

blogoscoop
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: