Subdomain Weiterleitung mit mod_rewrite

Monday, 26. May 2014 at 17:17 Uhr

Gestern wurde ich von Maik per E-Mail angefragt, wie ich denn die Umleitung von
http://www.danielschurter.net/mainsite/gastebuch/
nach
http://blog.danielschurter.net/gastebuch/
umgesetzt habe, denn er möchte für seine Homepage auch so etwas ähnliches realisieren.

Das Ganze ist recht einfach umzusetzen und benötigt nur ein paar Zeilen Code.
Solche “Kunststücke” sind nötig, wenn die Webseite nach Jahren umstrukturiert wird, aber die Links in den Suchmaschinen weiterhin funktionieren sollen, d.h nicht ins leere laufen dürfen.

In den folgenden Beispiel wird der Aufruf:
http://www.domain.tld/subfolder/index.html

umgeleitet nach:
http://blog.domain.tld/index.html
und das Verzeichnis /subfolder wird aus der URL entfernt.

1) Zuerst muss abgeklärt werden, ob der Provider die Ausführung von mod_rewrite in eigenen .htaccess auf dem Apache Webserver zulässt. Dies sollte heute eigentlich bei jedem Provider Standard sein.

2) Nun erstellt man eine Subdomain über sein Konfigurationstool (z.B. Plesk, Confixx). Die Subdomain wäre in diesem Fall blog, welche dann vor dem Domainname erscheint: blog.domain.tld

3) Nun wird überprüft, ob in dem Root Verzeichnis des Webservers ein Verzeichnis blog erstellt wurde (oder wo auch immer das Konfigurationstool es standardmässig erstellt)

4) Im Root Verzeichnis des Webservers wird eine leere .htaccess Datei erstellt und den folgenden Code hinein kopiert. (domain.tld musst natürlich an die eigene Domain angepasst werden)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$
RewriteRule ^(.*)$ "http\:\/\/blog\.domain\.tld\/$1" [R=301,L]

Zuerst wird mittels RewriteEngine on die Apache mod_rewrite Funktion aktiviert.

Danach wird die URL (%{HTTP_HOST}) gegen domain.tld überprüft. Dabei ist es egal, ob ein www. davor steht oder nicht, dies mach der Zusatz [OR] aus. Das Ganze ist eine Condition, also eine Bedingung, bevor die Regel (RewriteRule) zum Zuge kommt.

Ist die Bedingung erfüllt, so wird die URL nach http://blog.domain.tld umgebogen. Die Variable $1 macht nichts anderes, als alles was hinter der Domain noch kommt, brav mit zugegeben, also z.B. index.html. Mit [R=301] wird der Umleitungstyp beschrieben, in diesem Fall “Permanent” und mit dem Flag [L] wird die Ausführung beendet und keine weiteren Bedingungen mehr geprüft. Dies ist in unserem Fall eigentlich nicht nötig, da ja keine weitere Conditions mehr folgen.

5) Nun wird in das Verzeichnis blog gewechselt, dort wird wieder eine neue .htaccess Datei erstellt und der folgende Code hinein kopiert:

RewriteRule ^subfolder/(.*)$ /$1 [R=301,L]

Diese Regel sucht in der URL nach subfolder/ und ersetzt diesen durch / und belässt mittels der Variable $1 alles was danach kommt in der URL. Auch hier wird mit [R=301,L] den Umleitungstyp auf “Permanent” gesetzt und das Regelwerk am Ende gestoppt.

Viel Spass 🙂

Quellen:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.2/rewrite/flags.html