URL per PHP-Skript immer klein schreiben

Um die Erkennung von doppeltem Content für die Suchmaschinen auszuschließen und um das ganze Webprojekt schön sauber zu halten, sollte man grundsätzlich auf Großschreibung in URLs verzichten. Da es auch passieren könnte, dass Links auf anderen Seiten mit falscher Groß-/Kleinschreibung hinterlegt sind, die trotzdem zum Ziel führen wenn das CMS oder das eigene PHP-Projekt nicht Case-sensitiv arbeitet. Dies ist auch bei Word Press der Fall und betrifft somit sehr viele Seiten.

 

Lösung mittels Apache

Die erste Idee war es, den Apache per Rewrite-Regeln in der htaccess-Datei dazu zu bewegen alle URLs automatisch klein zu schreiben. Das Problem ist, dass man den Apache anscheinend nur vernünftig dafür nutzen kann, wenn man Zugriff auf die Config-Dateien des Apaches hat, da man hier mit einer Rewrite Map arbeiten muss. Es gibt zwar auch einige Beiträge, in denen die Rewrite Map in der htaccess-Datei aktiviert wird, aber da ich dies damals bei Strato erfolglos ausprobiert hatte und mich damit dann nicht weiter beschäftigt habe, komme ich zu dem Schluss, dass diese Möglichkeit bei einem Shared Hosting eher ausfällt.

Es gibt noch eine weitere Möglichkeit die htaccess-Datei für das Umschreiben der URLs zu nutzen:

Die Beschreibung dieser und auch der Rewrite Map-Methode gibt es hier. Der Apache ist mit dieser Methode allerdings zu stark ausgelastet und der Seitenaufruf wird unnötig in die Länge gezogen. Durch die Tatsache, dass die gleiche URL unter Umständen sehr oft durch Rewrite-Regeln läuft entsteht sehr viel Overhead.

 

Lösung mittels Skript

Da das ganze sowieso eher weniger an den eingesetzten Server-Typ gebunden sein sollte, macht die folgende Realisierung mittels eines Skripts in der Sprache in der die Seite betrieben wird mehr Sinn. In diesem Fall mit PHP:

Der Else-Zweig kommt eigentlich nicht zum Einsatz, da eine als Parameter übergebene URL in jedem Fall umgeschrieben wird und danach vom eigentlichen PHP-Projekt verarbeitet wird. Die Fehlerausgabe erfolgt nur, wenn das Skript ohne Parameter aufgerufen wird. Das Skript stammt aus diesem Blogbeitrag.

 

Wenn das Webprojekt schon komplett auf SSL umgestellt ist, muss man die Rewrite-Anweisung entsprechend abändern auf https:

Dadurch wird einer unnötigen weiteren Umleitung durch die Rewrite-Regel auf die https-Adresse vorgegriffen.

 

Nötige htaccess-Anpassung

In der htaccess-Datei benötigt man dann eine Regel die ungefähr wie folgt aussieht:

Die Regel sorgt dafür, dass alle URLs mit großen Buchstaben in der URL, die nicht innerhalb eines Mitgliederbereiches liegen und nicht auf eine auf dem Server liegende Datei verweisen, an das lowercase.php-Skript umgeleitet werden. Hierbei darf man keinesfalls eine 301-Umleitung verwenden! Die ursprüngliche URL wird als der Parameter rewrite-urltolower-url an das PHP-Skript weitergegeben. Durch den Zusatz QSA werden auch URL-Parameter mit übergeben.

 

Ausblick:

Alternativ kann man wohl auch das Canonical-Tag nutzen, welches eine Original-URL im html-Header angibt, wodurch die Suchmaschine weiß, dass die Seite nicht als doppelter Content zu werten ist.

Da man PHP auch zur Abwicklung der 301-Rewrites nutzen kann, könnte es eventuell sinnvoll sein, wenn man sehr viele Rewrite-Regeln hat, diese grundsätzlich über PHP und nicht die htaccess-Datei abzuwickeln. Die Abwicklung über PHP könnte schneller sein, als über den Apache selber. Bisher konnte ich aber bei rund 100 Rewrite-Regeln in der htaccess-Datei keine Probleme feststellen.

Wenn das Webprojekt allerdings nicht zu sehr an einen Server, z. B. Apache oder IIS, gebunden sein soll, macht es auch Sinn die 301-Regeln über PHP abzuwickeln um die Seite möglichst plattformunabhängig zu halten.

 

Tobias Langner

Ich arbeite seit mehreren Jahren als IT-Administrator, bin ausgebildeter Fachinformatiker für Systemintegration und Studium-„Pausierer“ an der FernUni Hagen

Achtung: Für die Richtigkeit der zur Verfügung gestellten Informationen, Skripte, etc. übernehme ich keine Gewähr. Deren Nutzung geschieht ausdrücklich auf eigene Gefahr!

Schreibe einen Kommentar