Suchmaschinenfreundliche URLs mit mod_rewrite
Einleitung
Mod_rewrite ist ein Apache Modul, mit dem man Internetadressen umschreiben kann, um sie zum Beispiel suchmaschinenfreundlicher zu machen, oder sie einfach zu tarnen, damit man nicht mehr so einfach an der Adresse rumschrauben kann.
Die Rewrite Engine die ich hier vorstelle, gibt es nur für den Apache. Also wird das hier beschriebene auch nur auf einem Apache Server funktionieren. Bei anderen Webservern musst Du dich erkundigen, ob es dort auch eine Rewrite Engine gibt.
Eine mod_rewrite Adresse sieht zum Beispiel so aus: einfaches-mod_rewrite-beispiel,8,35.html
Ursprüngliche URL: index.php?id=35&sel=8
Hierbei werden zum Seitenaufruf eigentlich nur die beiden Zahlen benötigt, die die Seiten ID und die Menu ID darstellen. Der Rest ist nur dazu da, die URL Google-freundlich zu machen.
Heißt also, dass es die Datei eigentlich gar nicht gibt. Der Dateiaufruf wird nur vom Apache auf die richtige Datei umgelenkt.
Das ganze wird in einer .htaccess Datei vereinbart. Diese muss im selben Verzeichnis erstellt werden, in dem auch die Datei ist, die "rewrited" werden soll.
Die Datei kann dann zum Beispiel so aussehen:
| 1 2 3 4 5 | RewriteEngine on RewriteRule ^index.html$ index.php [L] RewriteRule ^index,(.*),(.*).html$ index.php?sel=$1&id=$2 [L] RewriteRule ^index,(.*).html$ index.php?id=$1 [L] |
In der ersten Zeile wird die Engine aktiviert, damit die Rules die in den weiteren Zeilen geschrieben sind auch geparst werden.
Eine Regel zum "rewriten" einer URL wird mit "RewriteRule" definiert. Dahinter kommt dann ein Regulärer ausdruck, um die Adresse zu filtern.
| 1 2 3 4 5 | Zeichen:
^ => Anfang des Dateinamens
$ => Ende des Dateinamens
(.*) => Platzhalter
$1 => Variable zum Platzhalter |
Im oben gezeigtem Codefeld siehst Du alle Zeichen die ich für die Regulären Ausdrücke verwendet werden. Es gibt natürlich noch wesentlich mehr. Für ein einfaches Beispiel brauchen wir die restlichen nicht.
| 1 | RewriteRule ^index,(.*),(.*).html$ index.php?sel=$1&id=$2 [L] |
Hier mal eine Beispiel Relgel. Hierbei filtere ich die beiden IDs mit einem (.*) aus der URL raus. Diese können dann als Variable in die richtige URL übernommen werden. Die Variablen werden wie in PHP mit $ gekennzeichnet. Und je nach der Reihenfolge dann halt ein $1, $2, usw.
Das war es auch schon. Nun musst du nur noch alle Links auf der Website anpassen, so das auch die Rewrite Links genutzt werden. Falls du einen Fehler machen solltest, wirst du das nicht übersehen. Du bekommst dann einen "500 Internal Server Error", statt deiner Seite.
| 1 | Options +FollowSymlinks +SymlinksIfOwnerMatch |
Bei manchen Webservern muss man erst folgende Optionen noch aktivieren, damit alles richtig Funktioniert. Diese müssen vor die Rewrite Rules geschrieben werden. Experimentiere am besten mit den zwei Optionen. (pro "+" eine Option)
Es kann nämlich sein, das mod_rewrite zwar erlaubt ist, jedoch ist bei der Direktive Options die Option FollowSymLinks oder SymLinksIfOwnerMatch abgeschaltet ist.
FollowSymLinks bewirkt, dass der Server symbolischen Links folgt.
SymLinksIfOwnerMatch bewirkt, dass der Server nur symbolischen Links folgt, bei der die Benuzerkennung des Links mit der Benutzerkennung des Zielverzeichnis/-datei übereinstimmt. Das sollte wenn möglich nich aktiviert werden, um Performance zu sparen.
Falls es dann immer noch nicht geht, setze dich bitte mit deinem Hoster in Verbindung. Ich musste zum Beispiel bei campusspeicher.de erst Bescheit sagen, das ich mod_rewrite nutzen möchte. Zu Anfang war es deaktiviert.


