Serverside Redirect mit mod_rewrite
Redirects mit .htaccess umzusetzen, stößt mit wachsender Zahl von URLs an gewisse Grenzen. Ebenso verhält es sich, wenn bei Web Applications wie Webshops oder Contnet Management Systemen komplexere, unbekannte Strukturen abgebildet werden müssen.
Das Problem läßt sich aber mit regulären Ausdrücken (engl. “regular expressions”) lösen, die jeder Programmierer irgendwo, irgendwie schon mehr oder weniger oft eingesetzt hat.
Mehr Flexibilität bei Redirects mit .htacces gestattet das Apachemodul “mod_rewrite”, das eigentlich als Extension auf keinem Apache-Webserver der Version > 1.3 fehlen sollte.
Allerdings ist das Apache rewrite_module sehr umfangreich. Neugierigen empfiehlt sich ein Besuch bei Apache.org, um weitere Informationen zur Konfiguration und URL- Manipulation einzuholen, denn unpräzise formulierte Rewrite-Rules können dem Webserver bei der Auflösung der Adressen durch reguläre Ausdrücke enorme Resourcen des Arbeitsspeichers abverlangen.
Sie sollten Ihre ersten Erfahrungen idealerweise erst einmal auf einer Testumgebung und nicht auf den Webservern Ihrer Kunden oder an eigenen Live-Projekten machen, denn es sind Kenntnisse zu Regular Expressions und den Request-Mechanismen des Apachen erforderlich.
Rewriting-Regeln beim Redirect mit mod_rewrite
Grundsätzlich können die Rewriting-Regeln genau wie bei .htacess in der httpd.conf (für serverweite Regeln), oder in den .htaccess Dateien (für verzeichnisspezifische Regeln) vergeben werden, denn Sie werden in der .htaccess notiert.
mod_rewrite Redirect Beispiele
Ganz ehrlich, ein sehr großer Teil des Web funktioniert bereits mit dem rewrite_module des Apachen. Das ist jenen Entwicklern zu verdanken, die das sogenannte Deep-Web erschließbarer machen möchten. Plausible, aussagekräftige URLs (“Pretty Permalinks”) wie der URL dieser Webseite werden mit .htaccess und mod_rewrite aus einer Datenbank generiert.
Es geht immer darum, aus “www.miese-muschel.de/?wieso=darum” zum Beispiel “www.miese-muschel.de/deshalb” zu machen.
Mit und ohne www - kanonische Domainauflösung
Wenn für Besucher Ihrer Website (inklusive Crawler) Adressen mit und ohne “www” erreichbar sein sollen, wären nachfolgende Beispiele eine Lösung des altbekannten Problems.
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite\.com
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L]
Eine Alternative dazu wäre:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Der Codeteil [R=301,L] bedeutet, daß der Webserver dem Clint oder Suchcrawler den Statuscode 301 (R=301) zurück gibt. Dabei ist zu beachten, daß das "L" am Ende der Klammerung steht.
Redirect von einer Domain zu einer Anderen
Und so kann die Weiterleitung von einer alten Domain auf eine neue Domain realisiert werden:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
Änderung von Dateinamen mit mod_rewrite
Wenn es notwendig ist, daß anstelle von rewrite.htm die Datei rewrite.html geladen wird, sollen Sie folgendes Script verwenden:
RewriteEngine on
RewriteBase /
RewriteRule ^rewrite\.htm$ rewrite.html [R=permanent]
Globale Änderung von Dateiendungen mit mod_rewrite
Falls Sie beabsichtigen alle Seiten mit der Endung .htm auf Seiten mit der Endung .html umzuleiten, können Sie dies mit dem nachfolgenden Beispiel bewerkstelligen:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
Fazit über Redirects
Die Lektüre der Beiträge zum Thema Redirects und Suchmaschinen eröffnet dem aufmerksamen Leser, daß den serverseitigen Redirects eine zentrale Rolle in der Zusammenarbeit zwischen Content-Producer, Webmaster und Crawlern zukommt. Clientseitige Redirects hingegen eignen sich eher für Interface- und Webseiten Programmierung.
Am Ende stellt sich noch eine Frage: » Wie reagieren Suchmaschinen allgemein auf Weiterleitungen?
5. Februar 2008 - 15:59 | Webprogrammierung » Redirect & Suchmaschinen | ∞ | Codecasters