[Tutorial] Apache goes SEO: Ein mod_rewrite Tutorial zur URL-Manipulation

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Hadean, 3. März 2009 .

  1. 3. März 2009
    mod_rewrite

    Was ist das?
    Mod_Rewrite ist ein Modul für den Webserver Apache. Es ist von Haus aus bei der Standard-Installation dabei, ist aber nicht aktiviert. Ab der Version 1.2 des Apaches hilft einem das Modul durch das Parsen einer speziellen Datei, die URL zu manipulieren.

    Warum sollte ich?
    Hmm... Für eine Manipulation einer URL sprechen mehrere Gründe. Der eine möchte seine Dateien und Parameter oder gar seinen Programmierstil nicht jedermann auf die Nase drücken, Spambots ausschließen, ein anderer hat Suchmaschinenoptimierung im Sinne (daher auch die Bezeichnung „Suchmaschinenfreundliche URLs“), noch einer möchte den Suchmaschinen oder Besuchern statische Seiten vorgaukeln.

    Gibts da Beispiele?
    Mehrere... Ein Beispiel für ein simples, HTML-Seiten vorgaukelndes, Shopsystem wäre zum Beispiel Europas größter Instrumenten-Onlineshop: Thomann.
    Effektiv wird hier an die Domain und dem Unterverzeichnis mit der Landessprache die Bezeichnung der Produktgruppe oder gleich die Produktbezeichnung mit Unterstrichen getrennt angezeigt und durch die Endung „.html“ abgeschlossen, je nachdem wo man sich innerhalb des Shops hin navigiert hat.
    Rein theoretisch wäre es auch möglich, die Struktur komplett als Verzeichnisstruktur darzustellen. Hierfür wäre ein Beispiel des Unterschiedes:

    Gretsch Catalina Club Mod Black Widow

    Mehrere Schlagwörter aneinandergereiht, das Script sucht dann an der entsprechenden Stelle nach dem richtigen Datensatz. Eine andere Möglichkeit:

    http://www.thomann.de/de/drums_und_percussion/rock_kesselsaetze/gretsch/gretsch_catalina_club_mod_black_widow.htm

    Sieht vorerst so aus, als wären das alles wirklich Verzeichnisse, sinds aber warscheinlich nicht.

    Weitere Beispiele wären auf einer deutschen Hilfeseite für diesen Mod:
    http://www.modrewrite.de/mod_rewrite.examples.beispiele.phtml

    Wie geht das?
    Natürlich muss man als erstes Abklären, ob man bei seinem Hoster die Möglichkeit hat, Apache-Module zu de-/aktivieren, oder ob es aktiviert ist. Der Vorgang hierzu unterscheidet sich von OS zu OS und von Version zu Version. Bei den neuen Versionen des Apache wäre zum Beispiel bei einem Linux-System ausreichend, einen Symlink des mods-available-Verzeichnisses in das mods-enabled-Verzeichnis zu legen.
    Die .htaccess-Datei, welche vom Apache-Webserver grundsätzlich vor der Anzeige der Webseite geparst wird, kann unsere Manipulations-Sätze beinhalten.

    Was ist eine .htaccess-Datei?
    Die .htaccess-Datei ist eine Datei, welche Befehle für den Webserver vor der Anzeige jeglichen Webinhalts von diesem durchgeschaut wird. Diese wird in dem jeweiligen Hauptverzeichnis platziert, sollte man jedoch nichts dergleichen planen, kann man die Datei auch komplett weglassen.
    Ich bezeichne diese Datei einfach mal als .htaccess, man kann den genauen Dateinamen jedoch in der Apache-Konfigurationsdatei festlegen.

    Ist das kompliziert?
    Es birgt natürlich gewisse Schwierigkeiten, man benutzt reguläre Ausdrücke um die URL als Zeichenketten zu trennen. Hierbei gelten die Perl-Regeln für diese Ausdrücke, welche man einfach lernen muss, allerdings gibt es auch sehr übersichtliche Nachschauwerke (siehe modrewrite.de).

    Wie macht man das?
    Zuerst muss man in der .htaccess-Datei den mod einschalten. Hierfür schreibt man folgendes:

    Code:
    RewriteEngine on 
    Als nächstes folgen schon direkt die Regeln für die Manipulation der URL. Lasst mich für folgende Beispiele einfach mal festlegen dass es sich um nen Onlineshop für Weine handelt. Da hat man die Art des Weines, noch eine Unterkategorie und dann die Produkte.
    Für solche Sachen wie ein Impressum braucht man jedoch keine Produkt-ID oder so etwas aus einer Datenbank. Ergo kann man, sollte eine HTML-Vorgaukelung gewünscht werden (sieht ja irgendwie dämlich aus, wenn nur ein Teil der URLs Suchmaschinenfreundlich sind), den Link mit der Rewrite-Regel direkt in die .htaccess-Datei eintragen. Eine Regel wie diese sähe zum Beispiel so aus:

    Code:
    RewriteRule ^/impressum.html$ /index.php?action=impressum
    Der erste Befehl ist standalone und sagt dem Apache, dass nun ein Befehl für den Mod unseres Tutorials folgt. Sieht komisch aus, ist aber so. Schauen wir uns die Syntax-Regeln auf modrewrite.de an, so wissen wir, dass man die zu suchende Manipulation mit einem Zirkumflex anfängt und einem Dollarzeichen aufhört. Man merkt schon hier wenn man sowas einmal pro Webseite macht, man muss sowas nicht auswendig können
    Als nächstes kommt der Inhalt. Nun haben wir wieder die gleiche Entscheidung wie oben. Mit der imaginären URL asdf.com ist jetzt die Frage was für Parameter für die Findung unseres Contents nötig sind, oder auch: wie wir die URLs gestalten. Ich sehe nun von einem direkten Anhängen des Produktnamens an die Domain ab und wähle daher meine „Andere Möglichkeit“:

    Code:
    RewriteRule ^([a-z_]+)/([0-9a-z_]+)/([0-9]+)_([0-9a-z_]+).html$ warenkorb.php?kat=$1&yr=$2&prod=$3
    Mit dieser Regel wird z.B. folgende URL umgebaut:

    http://www.asdf.com/rotwein/2006er/128_trollinger_lemberger_trocken.html

    Hiermit wird der Datei warenkorb.php durch GET-Parameter gesagt, dass sie in der ersten Kategorie die Produkt-ID, die hier 128 wäre, in der Datenbank suchen soll. Mit den drei Informationen kann unser imaginäres Shopsystem was anfangen und die entsprechende Datei kann ausgegeben werden. Wir brauchen ja im Prinzip nur die Informationen bis zur 128, alles dahinter ist unintressant.
    Die Informationen innerhalb der runden Klammern werden im ersten Teil als Variablen gespeichert, erst das Jahr dann die Produkt-ID, welche dann hinter der PHP-Datei als Parameter angegeben werden, und diese Datei wird dann angezeigt.

    Es gibt noch viel mehr Möglichkeiten, surft doch einfach mal...

    Ansonsten lege ich euch für weitere Quellen die Linkliste von modrewrite.de ans Herz.

    Viel Spaß damit
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.