Eine Umleitung per htaccess ist schnell angelegt, aber wenn in der Weiterleitung auch noch Parameter berücksichtigt werden müssen, kann es haarig werden.
Onlineshop mit verkehrter Ordnerstruktur
Im Zuge eines Relaunches galt es, auch die Ordnerstruktur mal anzufassen. Diese ist ein paar Jährchen alt und auch mit dem damaligen (Un-)Wissen aufgebaut worden.
Beispielhaft geht es hier um Socken. Es gab also die Domain toller-sockenladen24.de.
Logischerweise befand sich in einem Ordner dann die Kategorie „Socken“.
1 |
https://www.toller-sockenladen24.de/socken/ |
Doch anstatt weiter in Ordnern vorzugehen, wurden die Unterkategorien auf Dateien verteilt. Also zum Beispiel stricksocken.php und nylonsocken.php
1 |
https://www.toller-sockenladen24.de/socken/nylonsocken.php |
Aus heutiger Sicht ziemlich fragwürdig, aber hey – das ist noch nicht alles! :-)
Die PHP-Dateien präsentierten dem Nutzer natürlich eine Auflistung der verschiedenen Artikeln in der Kategorie. Klickte der Nutzer auf ein Produkt, wurde er auf folgende URL verwiesen:
1 |
https://www.toller-sockenladen24.de/produkt.php?nr=AF456&r=nylonsocken |
Der Nutzer und die Suchmaschine wurde also wieder ins Hauptverzeichnis der Webseite geschickt, da sich dort die Detailseite zum Produkt befand.
Da durch die Neugestaltung sowieso so ziemlich alles angefasst werden musste, sollte auch die URL-Struktur mal generalüberholt werden. Und zwar sollte letztlich folgendes dabei rauskommen:
1 |
https://www.toller-sockenladen24.de/socken/nylonsocken/produkt.php?nr=AF456&r=nylonsocken |
Das ist zwar länger, dafür aber auch viel einleuchtender.
Bedingung: URL-Umleitung mit Parametern
Die produkt.php wird also aufgerufen und durch die Parameter r und nr weiß diese: Hier geht es jetzt um Nylonsocken und speziell um die mit der Artikelnummer AF456.
Eine Umleitung in der htaccess-Datei anzulegen ist ja kein großes Problem, aber wie bringe ich den Server dazu, anhand der URL-Parameter zu beachten, in welches Verzeichnis er umleiten soll?
Hier kommt das Apache Servermodul mod_rewrite ins Spiel. Damit lassen sich nicht nur lesbare URLs herstellen, sondern auch Weiterleitungen einrichten, die dynamisch reagieren.
Da mod_rewrite bei so ziemlich jedem Feld-,Wald- und Wiesenhoster installiert sein dürfte, kann das Modul einfach mit folgendem Befehl in der .htaccess-Datei aktiviert werden.
1 |
RewriteEngine on |
Schaden kann es auch nicht, das Startverzeichnis anzugeben. Das erfolgt mit der Anweisung
1 |
RewriteBase / |
Damit ist mod_rewrite quasi im Betriebsmodus und scharrt schon ungeduldig mit den Hufen.
Die Parameter aus der URL pflücken
Würde sich nur einmal der Ort unserer produkt.php ändern, könnte ich diese inklusive der Parameter einfach umleiten. Da aber jede Produktdetailseite im passenden Unterordner liegen soll, muss mod_rewrite die Parameter auch berücksichtigen, um ins passende Verzeichnis zu leiten.
Dafür muss eine Bedingung erstellt werden. Ist diese erfüllt, wird eine „RewriteRule“ angewendet.
1 |
RewriteCond %{query_STRING} ^(.*)&r=nylonsocken$ |
RewriteCond erstellt eine Bedingung, die Anweisung %{query_STRING} nimmt sich alle Zeichen der URL vor, die nach dem ? kommen. Da hier zwei Parameter an der URL hängen, aber nur die Nylonsocken wichtig sind, wird der erste Parameter einfach mit einem Platzhalter ersetzt (.*).
Diese Bedingung greift also nur, wenn der zweite Parameter die nylonsocken enthält. Erst dann greift folgende Regel:
1 |
RewriteRule ^produkt\.php$ https://www.toller-sockenladen.24de/socken/nylonsocken/produkt.php [R=301,L] |
Und schwupps, leitet die eigentlich im Wurzelverzeichnis liegende Datei in die korrekte Ordnerstruktur weiter.
Genauso funktioniert das natürlich mit Socken aus einer anderen Kategorie:
1 2 |
RewriteCond %{query_STRING} ^(.*)&r=stricksockensocken$ RewriteRule ^produkt\.php$ https://www.toller-sockenladen.24de/socken/stricksocken/produkt.php [R=301,L] |
Das ist auf jeden Fall eine effizientere und performantere Möglichkeit, als in der .htaccess hunderte von Umleitungen per Hand einzufügen, die bei jedem Seitenaufruf erstmal abgearbeitet werden müssen.
Wichtig ist diese Umleitung, bis Google alle neuen URLs im Index hat und diese auch in den Suhergebnissen anzeigt. Das kann mitunter schon eine ganze Weile dauern.
Ein zweiter wichtiger Punkt ist externe Verlinkung. Wurde von anderen Webseite auf eine Produktseite verlinkt, die nicht mehr da ist nützt das keinem etwas.
Und wo bleibt die Artikelnummer?