301-Redirects – Weiterleitungen mit .htaccess

Weiterleitungen – und zwar permanente Weiterleitungen, bei denen der Webserver dem Client und auch dem Crawler der Suchmaschine den Statuscode 301 übermittelt – sind aus SEO-Sicht sehr wichtig. Hier zeigen wir Ihnen, wie Sie mit Hilfe der sogenannten .htaccess-Datei flexibel Weiterleitungen (Redirects) realisieren.

Was ist die .htaccess?

Die .htaccess gilt bei Profis als Geheimwaffe für Website-Admins. Dateien mit dem Namen .htaccess (ohne Endung, der Punkt am Anfang kennzeichnet in der Unix-Welt versteckte Dateien) sind Server-Konfigurationsdateien für Webserver, insbesondere für Apache. Dieser übernahm das Konzept der .htaccess-Dateien vom Webserver NCSA httpd, der in den Anfangszeiten des WWW eine Zeitlang das Internet dominierte und als Basis für die Apache-Entwicklung diente. Wichtigster Anwendungskontext war bereits damals das Shared Hosting: Eine Webserver-Software ist für die Auslieferung mehrerer, voneinander unabhängiger Websites zuständig. Um diese individuell steuern zu können, sollte neben der zentralen Konfiguration (bei Apache über die httpd.conf) auch eine Konfiguration pro Verzeichnis möglich sein. Genau das leistet die .htaccess.

Bei jedem Aufruf einer Seite prüft der Webserver sämtliche Verzeichnisse der Dateistruktur oberhalb des angeforderten Dokuments auf das Vorhandensein solcher Konfigurationsdateien, liest sie ein und überschreibt die Default-Vorgaben der zentralen Konfiguration mit den verzeichnisspezifischen Inhalten. Diese werden also sofort und ohne Neustart des Servers wirksam.

.htaccess erstellen und bearbeiten

Voraussetzung für eine Nutzung der .htaccess ist, dass Ihr Provider diese in der zentralen Konfiguration freigeschaltet hat. (Welche .htaccess-Features in verschiedenen Tarifen von DomainFactory verfügbar sind, finden Sie hier.) Häufig (z. B. bei WordPress) ist auf Ihrem Webspace bereits eine .htaccess-Datei vorhanden. Um eigene .htaccess-Funktionen zu nutzen, müssen Sie diese lediglich mit einem Texteditor bearbeiten. Sollte Ihr FTP-Programm keine .htaccess anzeigen, prüfen Sie bitte, ob dieses eventuell versteckte Dateien ausblendet. (Achtung: Wenn Sie Änderungen an einer .htaccess-Datei vornehmen, machen Sie bitte vorher ein Backup – Syntax-Fehler führen schnell zu einem Server Error 500).

Ist tatsächlich keine .htaccess-Datei vorhanden, erstellen Sie eine Textdatei und speichern Sie per FTP auf Ihrem Webspace. Sie können diese Datei „.htaccess“ nennen, denn das ist der in der Apache-Konfiguration voreingestellte Standardname (theoretisch könnte Ihr Provider aber auch eine andere Benennung vorgeben). 

Die Direktiven (Befehle für eine spezifische Aufgabe oder Einstellung) in der .htaccess gelten stets für das Verzeichnis, in dem die Datei liegt, inkl. aller Unterverzeichnisse – solange dort nicht eine eigene .htaccess-Datei liegt, denn diese überschreibt die Vorgaben von .htaccess-Dateien in darüber liegenden Verzeichnissen. 

Weiterleitungen per .htaccess: mod_alias und mod_rewrite

Anders als der Name suggeriert, kann über die .htaccess weit mehr konfiguriert werden als nur Zugriffseinstellungen. Zu beachten ist aber, dass ein großer Teil der Funktionalität des Apache-Webservers in kompilierten Modulen steckt. Für Weiterleitungen per .htaccess-Datei können Sie die Module mod_alias und mod_rewrite nutzen. 

mod_rewrite ist ein Erweiterungsmodul zur flexiblen Manipulation von URLs mittels sogenannter Rewrite-Regeln. Das „Umschreiben“ kann URLs auf Dateipfade abbilden, aber auch auf andere interne oder externe URLs, interne Proxies bzw. Weiterverarbeitungen oder Fehlerseiten umleiten. In Ihrer .htaccess können Sie dieses Modul nur nutzen, wenn es in der Konfiguration von Apache geladen und aktiviert wurde. Infos darüber liefert die PHP-Funktion phpinfo().

Im Netz finden Sie häufig Anleitungen, die selbst für einfache Umleitungen mod_rewrite nutzen. Wir empfehlen dagegen bei einfachen URL-Manipulationen die „Redirect“-Direktive des Apache-Basismoduls mod_alias. Das Modul mod_rewrite ist zwar wesentlich mächtiger, erfordert aber auch mehr Know-how. So können schnell Syntaxfehler entstehen, wenn man sich nicht mit regulären Ausdrücken auskennt.

Weiterleitungen per Redirect

Redirect fordert beim Aufruf eines passenden URL-Pfades den Browser auf, die Ressource über eine andere URL anzufordern. Die Direktive erwartet die Angabe eines alten URL-Pfades, der neuen URL und ggf. eines Statuscodes. Syntax:

Redirect status  alter_URL-Pfad  URL

Der alte URL-Pfad (d. i. der Teil der URL nach Hostname + Port, case-sensitiv) beginnt mit einem Slash (/). Die neue URL geben Sie am besten als absoluten Pfad an. Default-Einstellung für den Statuscode ist „302“ bzw. „temp“ (temporäre Weiterleitung) – 301-Redirects müssen deshalb explizit angegeben werden! Einige Beispiele:

# Redirect auf eine neue Seite

Redirect 301 /altes-verzeichnis/alte-seite.html http://www.meine-domain.tld/neues-verzeichnis/neue-seite.html

# Redirect auf ein neues Verzeichnis

Redirect 301 /altes-verzeichnis/ http://www.meine-domain.tld/neues-verzeichnis/

# Redirect aller Seiten bei Umzug auf eine neue Domain (Navigationsstruktur bleibt gleich)

Redirect 301 / https://neue-domain.tld

# Redirect aller Seiten bei Umzug auf eine neue Domain (geänderte Navigationsstruktur, daher Weiterleitung auf Startseite)

Redirect 301 / https://neue-domain.tld/startseite.html

❗ Achtung: Redirect-Anweisungen werden nacheinander abgearbeitet, wobei zuerst gelistete Anweisungen Priorität haben – passt die Pfadangabe zu einem Aufruf, wird die entsprechende Anweisung ausgeführt und weitere ignoriert. Betreffen mehrere Anweisungen die gleichen Pfade (z.B. /verzeichnis1/datei sowie /verzeichnis1), sollten spezifischere Pfade zuerst aufgeführt werden. 

Mehr Informationen zu Redirect und anderen Direktiven von mod_alias finden Sie hier.

Weiterleitungen per RewriteRule

Das Modul mod_rewrite akzeptiert eine unbegrenzte Anzahl von Regeln (RewriteRule) und Regelbedingungen (RewriteCond), um zum Beispiel Weiterleitungen in Abhängigkeit von Server- oder Umgebungsvariablen, HTTP-Headern oder Zeitstempeln zu definieren. Die Direktive RewriteRule eignet sich auch für sehr komplexe Aufgabenstellungen. Der folgende Abschnitt kann nur eine kurze Einführung zum Modul geben. Weiterführende Informationen zum Funktionsumfang von mod_rewrite finden Sie hier und hier

Bevor Sie das Modul in Ihrer .htaccess-Datei nutzen können, müssen Sie mod_rewrite mittels der Direktive „RewriteEngine“ aktivieren:

RewriteEngine on

Es kann zudem erforderlich sein, das Startverzeichnis für die Rewrite-Anweisungen anzugeben. Das erfolgt per „RewriteBase“, z. B.

RewriteBase /

RewriteBase /startverzeichnis

„RewriteRule“-Direktiven werden ebenfalls der Reihe nach abgearbeitet. RewriteRule erwartet einen regulären Ausdruck für die Ausgangs-URL, deren Ersetzung sowie optionale Flags zum Beispiel für den Statuscode des Redirects (R=301) oder das Stoppen des Rewrite-Prozesses („Last“/ L). Syntax:

RewriteRule Suchausdruck Ersetzung [flags]

Die Regel wird angewendet, wenn der vom Browser angeforderte URI (bzw. der Teil unterhalb des Startverzeichnisses) zum Suchausdruck passt und eventuelle Bedingungen, angegeben per „RewriteCond“, zutreffen. Auch RewriteCond kennt Flags, z. B. „nocase“ (NC) oder „ornext“ (OR) für logische ODER-Verknüpfung mit der nächsten Bedingung (Default ist UND).  Hier ebenfalls einige Beispiele:

# Redirect mit Entfernung von www für alle Seiten von domain.tld

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

# Redirect auf www für alle Seiten von domain.tld außer robots.txt und sitemap.xml

RewriteCond %{REQUEST_URI} !^/(robots\.txt|sitemap\.xml)$
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC]
RewriteRule ^(.*)$ https://www.domain.tld/$1 [R=301,L]

# Redirect von http auf https für alle Seiten, wenn Aufruf nicht auf Port 443 erfolgt

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

# Redirect aller Seiten – mit und ohne www – bei Umzug auf neue Domain

RewriteCond %{HTTP_HOST} ^domain\.tld$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain\.tld$ [NC]
RewriteRule ^(.*)$ https://www.neue-domain.tld/$1 [L,R=301]

Zum Abschluss noch ein Tipp: Wenn Sie nicht wissen, ob in der Installation Ihres Providers rewrite_mode (oder ein anderes benötigtes Modul) installiert bzw. geladen ist, können Sie das per <ifModule> prüfen und alle darauf bezogenen Anweisungen bedingt ausführen lassen:

<IfModule mod_rewrite.c>
  ..  Anweisungen
</IfModule>

End of article

DomainFactory

Über den Autor

DomainFactory

Als Qualitätsanbieter überzeugen wir mit HighEnd-Technologie und umfassenden Serviceleistungen. Mit mehr als 1,3 Millionen verwalteten Domainnamen gehören wir zu den größten Webhosting-Unternehmen im deutschsprachigen Raum.

4 Kommentare

Die von Ihnen hier erhobenen Daten werden von der domainfactory GmbH zur Veröffentlichung Ihres Beitrags in diesem Blog verarbeitet. Weitere Informationen entnehmen Sie bitte folgendem Link: www.df.eu/datenschutz


  • Sascha
    Sascha - 1. Februar 2020 um 02:46 Uhr

    Sehr ausführlich, Danke! Wie ließen sich denn diese Direktiven auf NGNIX Webspaces umsetzen? Hab gehört, dort funktionieren htaccess Dateien gar nicht

    • Inga
      Inga - 4. Februar 2020 um 15:22 Uhr

      Hallo Sascha,
      das ist der Fall, wenn man statt Apache Nginx als Webserver nutzt. Bei Shared Hosting-Produkten von DomainFactory ist das aber nicht möglich.
      In diesem Fall benötigt man andere Direktiven. Das wäre evtl. ein Thema für einen eigenen Artikel, wir ziehen das gerne in Betracht.

      Viele Grüße
      Inga

  • Christopher Seidel
    Christopher Seidel - 3. Februar 2020 um 12:01 Uhr

    wirklich toller Artikel, sehr sehr ausführlich
    eure Artikel lese ich immer gerne 🙂

  • Stefan
    Stefan - 3. Februar 2020 um 20:52 Uhr

    Super erklärt.