Theorie für die RewriteEngine

Ziele:


Schalte die Maschine zuerst an!

Wenn du in einer .htaccess-Datei Befehle ausführen möchtest, die irgend etwas mit "rewrite" im Namen haben, musst du die sog. RewriteEngine im Apache-Server aktivieren:

RewriteEngine on

Am besten notierst du diese Zeile, bevor du "rewrite"-Befehle einfügst.


Der Aufbau von RewriteRules

Der Code für solche Regeln ist grundsätzlich so aufgebaut (Dummy-Code):

RewriteRule Suchmuster Zielmuster

Wie ist das zu verstehen? Der erste Parameter, das Suchmuster, untersucht die eingehende URL/den eingehenden Pfad. Das ist aber auch eine Bedingung. Erst wenn diese erfüllt wird, wird auf die URL/den Pfad im zweiten Parameter, dem Zielmuster, umgeleitet.

Im Suchmuster werden reguläre Ausdrücke (kurz "RegEx") eingesetzt. Die hast du ev. schon in deinem PHP- oder JavaScript-Code verwendet. Wir schauen und das in einem ersten, einfachen Beispiel an und leiten nochmals von Hasi "Hasi" nach "Mausi" um (vergl. letzte Übung):

RewriteRule ^hasi\.html$ mausi.html

Diese RewriteRule bringt noch keinen echten Mehrwert gegenüber den Redirects (vergl. letzte Übung), das Beispiel dient mehr zur Veranschaulichung. Es sind darin auch keine Pfade definiert, der Ablauf wird also nur funktionieren, wenn sich beide HTML-Dokumente und die .htaccess-Datei im gleichen Verzeichnis befinden.

Leider kann ich an dieser Stelle keine Einführung in Reguläre Ausdrücke bieten. Trotzdem erkläre ich dir hier ein paar wichtige Dinge:

\. Der Punkt in einem regulären Ausdruck ist eine Art Schlüsselwort und muss mit einem Backslash "escaped" werden (du entziehst ihm mit diesem Trickli seine Funktion im Kontext des regulären Ausdruck, er wird wieder zum "normalen" Punkt verzaubert, denn er kennzeichnet ja eigentlich die Dateiendung).
^myString Die zu durchsuchende Zeichenkette beginnt mit einem Text, der auf "myString" passt.
myString$ Die zu durchsuchende Zeichenkette endet mit einem Text der auf "myString" passt.
^myString$ Die zu durchsuchende Zeichenkette passt genau von Anfang bis Ende auf "myString".

Variablen im Zielmuster - Recycling der Logik im Suchmuster

Portiönchen aus dem Suchmuster können in einer Art Variablen abgelegt werden, um diese im Zielmuster wieder einzusetzen. Das ist zu Beginn ziemlich schwierig zu verstehen, erspart dir jedoch mühsame Schreib- und Denkarbeit, wenn du etwas vertraut mit dem Prinzip bist.
Schauen wir uns dazu ein weiteres Beispiel mit einer solchen Portiönchen-Variablen an:

RewriteRule ^(mausi)\.html$ $1.php

Damit leiten wir den Request von mausi.html auf mausi.php um. "mausi" aus dem Suchmuster steht in der Variablen $1 Im Zielmuster wieder zur Verfügung. Die Zahlen im Variablen-Namen bedeuten die Reihenfolge des Vorkommens (von links nach rechts) im Suchmuster, also $1, $2, $3, etc.

Beachte die runden Klammern ()

Die Klammern () sind hier keine Steuerzeichen für das Abarbeiten des Regulären Ausdrucks, wie man auf den ersten Blick meinen könnte! Sie definieren den Bereich im Suchmuster, der für die erneute Verwendung mit Hilfe der $1-Variable im Zielmuster erhalten bleiben soll.

Beachte die $-Zeichen im Code: Das gleiche Zeichen hat hier zwei völlig verschiedene Bedeutungen, ganz schön verwirrend, nicht?