Weiterleitungen mit Mod_Rewrite

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 Susi

Moin, ich bin Susi. Hier auf www.netz-online.com veröffentliche ich Themen aller Art. Die Palette reicht von Shop-Vorstellungen, Produkttests, E-Commerce, Geld verdienen, Onlinehandel, Sparen, Technik und B2B.

5 Kommentare zu Weiterleitungen mit Mod_Rewrite

    • 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…

  1. 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?

  2. 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]

  3. Hi Susi,
    auch wenn der Artikel schon älter ist, ist das Problem bei mir ganz aktuell :)

    Ich habe den passenden Codeschnipsel hier gefunden, aber leider leitet nur die Domain ohne www. auf die neue Domain weiter. Das funktioniert problemlos, aber bei Eingabe der URL mit www. lande ich auf einer „under construction Webseite und werde leider nicht weitergeleitet…
    Hat vielleicht jemand eine Idee wie ich das Problem lösen kann?

    Danke schon mal im Voraus.

    Grüße

    Carsten

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


Durch das Fortsetzen der Benutzung dieser Seite, stimmst du der Benutzung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen", um Ihnen das beste Surferlebnis möglich zu geben. Wenn Sie diese Website ohne Änderung Ihrer Cookie-Einstellungen zu verwenden fortzufahren, oder klicken Sie auf "Akzeptieren" unten, dann erklären Sie sich mit diesen.

Schließen