Wenn man eine Website aufsetzt, muss man ab und an auch den dazugehörigen Webserver ein wenig konfigurieren. Dies lässt sich abseits der eigentlichen Konfiguration (Server-seitig) noch über bestimmte Dateien im jeweils aufgrufenen Verzeichnis umkonfigurieren. Dies sind .htaccess und .htpasswd

Erstere (.htaccess) soll hier das Thema sein.

Für Windows-Nutzer ist die Benennung vielleicht irritierend: Nach Windows-Konventionen, hätte die Datei eigentlich keinen Namen, sondern nur die Dateierweiterung “.htaccess”. Nach Linux-Konventionen heisst die Datei indes schlicht “htaccess” und hat keine (!) Dateierweiterung. Der Punkt vor dem Namen weist Linux an, die Datei als versteckt zu behandeln.

Davon abgesehen handelt es sich um eine ganz normale Textdatei.

Üblicherweise werden in der .htaccess Um- oder Weiterleitungen eingetragen. Entweder für einzelne Dateien oder ganze Domains.

Domain-Weiterleitung

Wenn mehrere Domains auf die gleiche Website zeigen, ist das für Suchmachinen “double content”, was zur Abwertung führt. Die Lösung ist ein 301-Redirect. Dabei leitet der Webserver die Anfrage auf das neue Ziel und gibt als Status “301 (moved permanently)” aus.

Auf vielen Webservern lässt sich für jede Domain ein eigenes Zielverzeichnis angeben. Es wird nun also neben dem Verzeichnis der eigentlichen Website (z.B. “website_xyz”) noch ein weiteres Verzeichnis angelegt (z.B. “website_xyz_301″).

Nehmen wir an, daß die Website über folgende Domains erreichbar sein soll:

  • domain1.tld
  • www.domain1.tld
  • domain2.tld
  • www.domain2.tld

domain2.tld ist die Hauptdomain; alle Anderen sind “Nebendomains”.

domain2.tld sollte auf das Verzeichnis “website_xyz” verweisen.

Alle anderen Domains verweisen auf das Verzeichnis “website_xyz_301″.

Im Verzeichnis “website_xyz_301″ wird nun eine .htaccess mit folgendem Inhalt angelegt:

RewriteEngine On
redirect 301 / http://domain2.tld/

Das war’s.

URL-Weiterleitung und -Umschreibung

Wen man die URL-Struktur ändert (aus welchen Gründen auch immer), würden die alten URLs nicht mehr funktionieren. Besucher die über (ältere) Suchmachineneinträge kommen, bekämen dann einen 404-Fehlermeldung … es sei denn, man richtet 301-Redirects ein. Nun wäre es müßig, für jede neue URL eine eigene Umleitung einzurichten. Das geht oft auch besser:

Die URLs für z.B. Blogeinträge hatten früher folgende Form:

http://shaded-arts.com/blog/d/2009/01/09/blackmetal-26/

Später wurden die URLs in folgendes Format gebracht:

http://shaded-arts.com/blog/26/

In der .htaccess im Website-Root findet sich dazu folgendes:

RewriteRule ^blog/d/([^/]+)/([^/]+)/([^/]+)/(.*)-(.*)$ http://shaded-arts.com/blog/$5 [R=301,L]

Wenn man die alten und die neuen URLs vergleicht, sieht man, daß “/d/2009/01/09/blackmetal-” weggefallen ist. Dabei ist das “d” statisch, die Zahlen spiegeln das Datum wieder, und “blackmetal-” ist der Titel des Eintrages. Datum und Titel sind natürlich bei jedem Eintrag anders…

Man muss also “nur” die einzelnen Pfadteile der URL separieren und Variablen zuweisen. Dann kann man die URL neu zusammenbauen:

Jede URL beginnt mit “blog/d/”. Dann kommt für jeden Datumsteil ein “([^/])”, mit “/” getrennt. Zuletzt wird noch der Titel separiert mit “/(.*)-(.*)”.

Jede geklammerte Angabe lässt sich als Variable ansprechen. Die erste Angabe wäre “$1″; die letzte entsprechend “$5″.

Somit kann die neue URL zusammengebaut werden mit “$5″ am Ende, was der Blogeintrags-Id entspricht.