Okt
22

In diesem Artikel möchte ich anhand von einigen Beispielen erklären, wie man Domains, einzelne Seiten und Verzeichnisse umleitet. Dazu muss allerdings das Modul “Mod_Rewrite” auf dem Apache-Webserver aktiviert sein und man braucht eine Datei namens .htaccess.

Wie lege ich eine .htaccess Datei an?

Wir legen als erstes eine Datei htacces.txt mit dem Texteditor an. In diese Datei schreiben wir alle notwendigen Angaben rein. Danach öffnen wir unser FTP Programm und laden die htacces.txt auf den Webspace. Dort benennen die htacces.txt in .htaccess um (den Punkt nicht vergessen).

Erklärung: Wenn man unter Windows versucht mittles Abspeichern oder Umbenennen eine .htaccess Datei zu erstellen, wird man feststellen, dass Windows die Aktion verweigert und von uns verlangt, einen „richtigen“ Dateinamen einzugeben. Das FTP Programm interessiert es nicht, ob ein Name vor dem Punkt steht oder nicht.


Eine Standard-Domain definieren:

Mit dem folgenden Code kann man eine Standarddomain definieren. Das bedeutet, wenn ein User eine Domain ohne “www” eingibt, wird er automatisch auf www.domain.de weitergeleitet.

Beispiel 1:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.de$ [NC]
RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301]

Ergebnis: domain.de wird zu www.domain.de

Umgekehrt ohne www lautet der Code so:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^domain\.de$
RewriteRule ^(.*)$ http://domain.de/$1 [L,R=301]

Ergebnis: www.domain.de wird zu domain.de

Beispiel 2: Funktioniert nur wenn es der selbe Host ist.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

Ergebnis: domain.de wird zu www.domain.de

Umgekehrt ohne www lautet der Code so:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ http://domain.de/$1 [L,R=301]

Ergebnis: www.domain.de wird zu domain.de

Der folgende Code bedeutet, dass ein Besucher der www.alte-domain.de eingibt automatisch auf www.neue-domain.de weitergeleitet wird. Natürlich werden alle Urls mit übergeben, zb. www.alte-domain.de/seite.html wird zu www.neue-domain.de/seite.html.

Beispiel:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.alte-domain\.de$ [NC]
RewriteRule ^(.*)$ http://www.neue-domain.de/$1 [L,R=301]

Ergebnis: www.alte-domain.de wird zu www.neue-domain.de


Einzelne Seiten umleiten:

Hier wird beim Aufruf der Seite seite-alt.html direkt zur Seite seite-neu.html weitergeleitet

RewriteEngine On
RewriteRule ^seite-alt\.html$ /seite-neu.html [R=301,L]

Ergebnis: seite-alt.thml wird zu seite-neu.html

Der folgende Code ist dafür geeignet, wenn auf eine neue Domainunterseite weitergeleitet werden soll:

RewriteEngine On
RewriteRule ^seite-alt\.html$ http://www.neue-domain.de/seite-neu.html [R=301,L]

Ergebniss: seite-alt.html wird zu www.neue-domain.de/seite-neu.html


Das ganze funktioniert auch per Redirect

Sobald man seine Webeite umbenennt oder auf eine neue Domain zieht, kann man per Redirect von der alten Seitenadresse auf die neuen Adresse weiterleiten. Dabei kann man verschiedene Status-Codes an den Suchmaschinen Spider ausgeliefern.

In der Regel verwendet man folgende HTTP-Status-Codes:

301 = bedeutet das die Seite jetzt dauerhaft / permanent an anderer Stelle zu finden ist.
302 = bedeutet das die Seite zeitweilig an anderer Stelle zu finden ist.

Beispiel 1:

Redirect 301 /seite.html http://www.neue-domain.de/seite.html

Ergebnis: www.alte-domain.de/seite.html wird zu http://www.neue-domain.de/seite.html

Beispiel 2:

Redirect 301 /verzeichnis/seite.html http://www.neue-domain.de/neu-seite.html

Ergebnis: www.alte-domain.de/verzeichnis/seite.html wird zu http://www.neue-domain.de/seite.html

Beispiel 3:

Redirect 301 /verzeichnis http://www.neue-domain.de/verzeichnis-neu/

Ergebnis: www.alte-domain.de/verzeichnis/ wird zu http://www.neue-domain.de/verzeichnis-neu/


Umleitung ganzer Seiten

Wenn man komplett mit seiner Seite umzieht, ist die einfachste Variante den folgenden Code zu benutzen:

Redirect 301 /  http://www.neue-domain.de/

Der “/” gibt an, dass alle Dateien und Verzeichnisse auf die neue Domain umgeleitet werden sollen. Der Schrägstrich “/” am Ende der Domain ist wichtig, sonst funktioniert die Weiterleitung nicht richtig. Ebenfalls muss die Verzeichnisstruktur gleich geblieben sein.


Eine weitere Variante ist der Befehl RedirectMatch

Im Gegensatz zu Redirect unterstützt RedirectMatch reguläre Ausdrücke. Das ist besonders sinnvoll bei umfangreichen und komplizierten Weiterleitungen.

Beispiel 1:

Möchte man seine Webseite auf eine neue Dateiendung umstellen will: aus .php wird .html

 RedirectMatch permanent (.*)\.php$ http://www.domain.de$1.html

Ergebnis: Die angeforderte Dateien mit der Endung .php werden zu der gleichnamigen Datei mit der Endung .html umgeleitet. Das gilt für die komplette Webseite, also für alle .php-Dateien. So würde es ausehen:

http://www.domain.de/index.php —> http://www.domain.de/index.html
http://www.domain.de/seite.php —> http://www.domain.de/seite.html

Beispiel 2:
Dateien sollen von einem Unterverzeichnis auf die Haupt- Domain weitergeleitet werden, wo kein Unterverzeichnis namens “abc” existiert.

RedirectMatch  ^/abc/([a-zA-Z0-9_-]*).html$   http://www.domain.de/$1.html

Ergebnis: http://www.domain.de/abc/seite.html —> http://www.domain.de/seite.html

Die Möglichkeiten mit RedirectMatch umzuleiten sind sehr vielfältig, doch dazu später einmal mehr.


Links:

Mehr zu regulären Ausdrücken gibt es bei Selfhtml und Wikipedia
Dokumentation Apache mod_alias
Dokumentation Apache mod_rewrite

Über den Autor des Beitrages Susi

Ich bin Susi und ich hoffe der Artikel hat dir gefallen. Über dein Feedback würde ich mich sehr freuen. Mehr Information über mich, erhälst du auf meiner privaten Seite www.schmunzelbiene.de.
4 Kommentare

Hi,

Schreibfehler?
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.alte-domain\.de$ [NC]
RewriteRule ^(.*)$ http://www.neue-domain.de/$1 [L,R=301]

So funktionierts (zumindest bei mir eben :-) )
RewriteCond %{HTTP_HOST} !^www\.alte-domain.de\$ [NC]

Das ist kein Schreibfehler, denn diese Variante funktioniert sehr gut. Ich habe deine Version ausprobiert und diese verursacht bei mir eine Umleitungsschleife, daher funktioniert sie nicht.
Eventuell liegt das am Webserver…

Hallo,
als erstes will ich für die super erläuterung und Beispiele bedanken!

Habe einiges ausprobiert, leider aber kam nicht zum angestebten Ergebnis.
Habe folgendes Problem:
Habe 3 Domains, die auf einem Wabspase in den Unterordner laufen sollen. Sprich
http://www.domain1.de soll in unter http://www.domain1.de/ordner1 erreicht werden.
http://www.domain2.de soll in unter http://www.domain2.de/ordner2 erreicht werden.
http://www.domain3.de soll in unter http://www.domain3.de/ordner3 erreicht werden.

heute habe ich folgenden Eintrag in .htaccess

RewriteEngine on
RedirectMatch permanent ^/$ http://www.domain1.de/ordner1/index.php

sprich alles was unter root/ abgerufen wird läuft es auf
http://www.domain1.de/ordner1/index.php

Und dies soll sich ändern.
Hat jemand eine Idee?

HIer die Lösung

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.test1\.de$ [NC]
RewriteCond %{REQUEST_URI} !^/projekt1/
RewriteRule ^(.*)$ /projekt1/$1 [L]

RewriteCond %{HTTP_HOST} ^www\.test2\.de$ [NC]
RewriteCond %{REQUEST_URI} !^/projekt2/
RewriteRule ^(.*)$ /projekt2/$1 [L]

Hinterlasse einen Kommentar
Teile uns und den anderen Lesern einfach mit, was du denkst!

(erforderlich)

(erforderlich)


Abonnieren ohne einen Kommentar abzugeben