Tutorials
[ Zurück ]
Leserliche URLs mit mod_rewrite
Leserliche URLs mit mod_rewrite
Worum gehts?
Dieses Tutorial soll die ersten Schritte erklären, wie man trotz dynamischer Website-Strukturen, also URLs mit einigen Paramemtern, schöne und leserliche URLs verwenden kann. Ziel des Ganzen ist folgende Veränderung:Alt: http://domain.de/index.php?seite=726&modul=blog
Neu: http://domain.de/blog/Titel-der-Seite--726.html
Zweck des Ganzen: Es ist offensichtlich, dass die neue URL deutlich lesbarer, schöner und aussagekräftiger ist. Das ist nicht nur toll für den Besucher, für den die URL dann nicht mehr ein komplexes Wirrwarr ist, sondern eben auch zB für Suchmaschinen, die dann dank der URL genauer bestimmen können, worum es eigentlich auf der Seite geht. Für einen guten und erfolgreichen Webauftritt ist das also unerlässlich.
Was brauche ich dafür?
Um dein ganzes wie oben beschrieben umzurüsten, sind ein großer und zwei kleine Schritte notwendig. Würdest du die neue URL einfach so aufrufen, würdest du natürlich den 404-Nicht-gefunden-Fehler sehen, da weder das Verzeichnis "blog" noch die entsprechende HTML-Seite existiert. Also musst du deinem Server beibringen, dass er trotz der aufgerufenen URL die Seite /index.php?seite=726&modul=blog anzeigt. Und am besten bringst du deinem Server das mit einer .htaccess-Datei bei.Eine .htaccess-Datei ist eine ganz normale Text-Datei auf deinem Server, die ein paar Zeilen voll Anweisungen enthält. Diese Anweisungen steuern das Verhalten des Servers, genauer gesagt, wie er mit Besuchern "umgeht". Um so eine Datei anzulegen, erstellst du auf deinem Server einfach eine ganz normale Text-Datei und benennst sie in ".htaccess" um. Fertig. Die .htaccess-Datei muss im obersten Verzeichnis - also quasi "neben" der index.php - liegen.
Inhalt der .htaccess
Die Funktion, mit der du deinem Server beibringen kannst, dass er nicht die aufgerufene URL anzeigt, sondern eben deine index.php, trägt den Namen "mod_rewrite". Damit das dann auch funktioniert, musst du aber erst mal diese Funktion aktivieren. Das geht mit folgender Zeile:
RewriteEngine on
Jetzt steht die Funktion zur Verfügung und wir müssen dem Server zeigen, was er jetzt tun soll, wenn so eine URL aufgerufen wird. Dazu müssen wir ihm erst mal das Muster - also den Aufbau - der aufgerufenen URL zeigen, welches so aussieht:
^(.*)/(.*)--(.*).html$
Das Häkchen ^ am Anfang steht für den Beginn der URL, also alles, was nach dem http://domain.de/ kommt. Danach kommt ein (.*), was ein Platzhalter ist. Dieser Platzhalter steht für eine beliebiger Zeichenkette, in unserem konkreten Beispiel wäre das hier "blog". Danach kommt der Slash und der nächste Platzhalter, was bei uns für den Titel der Seite steht. Nach dem doppelten Bindestrich -- kommt der dritte und letzte Platzhalter, der bei unserer URL die Seiten-ID "726" ist. Das Dollarzeichen $ am Schluss zeigt dem Server, dass hier das Muster zu Ende ist.
Jetzt weiß der Server schonmal, dass er mit allen URLs, die dieses Muster erfüllen, irgendetwas tun muss. Was er damit aber genau machen soll, zeigen wir im mit folgendem Teil:
Jetzt weiß der Server schonmal, dass er mit allen URLs, die dieses Muster erfüllen, irgendetwas tun muss. Was er damit aber genau machen soll, zeigen wir im mit folgendem Teil:
/htdocs/index.php?seite=$3&modul=$1
Hier sagen wir, dass der Server die Seite index.php aufrufen und ihm die Parameter "seite" und "modul" übergeben soll. Allerdings kommen hier shcon wieder die Dollarzeichen $ vor. Hier stehen sie allerdings nicht für das Ende, sondern sind - ganz wie bei PHP eine Variable. Die Variable $3 steht dabei für den dritten Platzhalter, die Variable $1 für die Erste. Die zweite Variable ($2) könnten wir zwar auch noch übergeben, aber da die ja eh nur der Titel der Seite ist, brauchen wir sie gar nicht.
Achtung: obwohl deine index.php bei CwCity im obersten Verzeichnis liegt, musst du vorher noch /htdocs/ einfügen, weil der Server quasi das ganze von dort aus sieht. Wenn deine Website nicht auf CwCity liegt, lass den ersten Slash und das "htdocs" einfach weg!
Um eine ganze Befehlszeile zu schreiben, müssen wir jetzt nur noch diese zwei Teile zusammenfügen:
Achtung: obwohl deine index.php bei CwCity im obersten Verzeichnis liegt, musst du vorher noch /htdocs/ einfügen, weil der Server quasi das ganze von dort aus sieht. Wenn deine Website nicht auf CwCity liegt, lass den ersten Slash und das "htdocs" einfach weg!
Um eine ganze Befehlszeile zu schreiben, müssen wir jetzt nur noch diese zwei Teile zusammenfügen:
RewriteRule ^(.*)/(.*)--(.*).html$ /htdocs/index.php?seite=$3&modul=$1
Die Zeile fängt mit der Art des Befehls an - hier eine RewriteRule, macht weiter mit dem Muster und hört mit der gewünschten Adresse auf. Fertig.
Hier nochmal der komplette Inhalt deiner .htaccess-Datei:
RewriteEngine on RewriteRule ^(.*)/(.*)--(.*).html$ /htdocs/index.php?seite=$3&modul=$1
Die zwei kleinen Schritte:
Wenn du deine .htaccess-Datei angelegt und die zwei Zeilen eingetragen hast, musst du nur noch zwei kleine Schritte vornehmen:
1. In der HTML-Ausgabe der index.php musst du im HEAD-Bereich noch eine zusätzliche Zeile angeben, damit die relativen Pfade stimmen. Weil der Browser nämlich denkt, dass er sich im Verzeichnis http://domain.de/blog/ befindet, musst du ihm klar machen, dass er immer noch bei http://domain.de ist. Das geht mit folgender Zeile (im HEAD-Bereich einfügen!):
<base href="http://domain.de/">
2. Jetzt musst du den letzten Schritt machen, und deine ganzen Links in die neue Form bringen. Also überall, wo du jetzt folgendes stehe hast:
<a href="index.php?seite=726&modul=blog">Titel der Seite</a>
schreibst du nun:
<a href="blog/Titel-der-Seite--726.html">Titel der Seite</a>
Et voila - Jetzt hast du eine Website mit suchmaschinenfreundlichen, lesbaren und schönen URLs!
|
Folgende User sind hier gerade aktiv:
-
-
