Eine saubere URL-Struktur mit echten Permalinks ist sicher ein wichtiges Element der OnSite-Optimierung. Damit das Konstrukt aber auch gegen äußere Einflüsse (d.h. URL-abtippende User, String-Destruction in Foren, E-Mail-Programmen u dgl.) stabil bleibt, sollte jede aufgerufene Seite zum einen ihre kanonische URL entweder im HTTP-Header oder als Canonical-Tag schicken. Außerdem sollte sie beim Aufruf den URL prüfen, mit dem sie aufgerufen wurde, diesen gegen den Canonical-Wert testen und bei Diskrepanzen entsprechend reagieren.

Zunächst muss die Applikation allerdings die echte URL überhaupt auslesen können – zumindest bei uns sorgt mod_rewrite dafür, dass unser Code erst einmal gar keinen direkten Zugriff mehr auf die eigentliche URL über die üblichen CGI-Variablen hat:

D.h. alles was nicht als physikalische Datei existiert, wird auf den rw-Parameter umgeschrieben und durchgereicht (PassThru), danach ist Ende. Das bedeutet, dass CGI.SCRIPT_NAME für einen Artikel mit dem URI-Pfad /foo/bar/whatever,123/ in der Applikation nicht mehr brauchbar ist, um diesen URL-Test zu fahren.

Damit die Applikation noch an die echte URL herankommt, muss die RewriteRule erweitert werden:

In PHP kommt man nun mit $_SERVER[‚REDIRECT_REAL_URL‘] an den gewünschten Wert – und kann nun je nach Anwendungsfall einen 301er schicken oder sich auf das Canonical-Tag verlassen.

Kommentar verfassen