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
Vielen Dank!
Bin gerade am lernen von htaccess und mod_rewrite. Sie haben mir schon viel geholfen!