Umleitungen mit Apache: Redirect-Anleitungen für CentOS und Ubuntu

Apache-Weiterleitungen bzw. -Umleitungen sind für eine Vielzahl von Situationen nützlich. Unter anderem können Sie mit den praktischen Redirects Besucher von der HTTP- zur HTTPS-Version Ihrer Website lenken, Datenverkehr von einer www- auf eine Nicht-www-URL umleiten oder auch Website- und Verzeichnisnamen ändern. Wir helfen Ihnen dabei, Apache-Redirects auf CentOS und Ubuntu zu verstehen und zu konfigurieren.

Dedicated Server von IONOS

Hardware trifft Cloud: Dedicated Server mit Cloud-Integration und mit minutengenauer Abrechnung, inklusive persönlichem Berater!

24/7 Support
Unbegrenzter Traffic
SSL Zertifikat

301- oder 302-Redirect: Was ist der Unterschied?

Betrachtet man Weiter- bzw. Umleitungen, gilt es insbesondere zwischen 301- und 302-Redirects zu unterscheiden. Ersterer Statuscode (301) steht dabei für eine permanente, während letzterer (302) eine temporäre Umleitung kennzeichnet.

Eine 301-Umleitung ist aus SEO-Sicht weitaus wünschenswerter. Trifft ein Suchmaschinen-Crawler nämlich auf einen solchen Redirect, versteht er, dass es sich um eine permanente Umleitung handelt. Er notiert aus diesem Grund nicht nur die neue URL, sondern leitet auch den Prozess der Übertragung eines beliebigen Page-Rank-Wertes von der alten auf die neue URL ein – das bereits erzielte SEO-Ranking bleibt folglich erhalten.

Erfasst ein Crawler hingegen eine 302-Umleitung, notiert er sich die neue Adresse und geht weiter. Abhängig vom Crawler kann er die URL für einen Wiederholungsbesuch irgendwann in der Zukunft markieren. Dies geschieht, weil ein 302-Redirect anzeigen soll, dass die Umleitung nur temporär und die „echte“ URL bald wieder online ist.

Tipp

Geben Sie bei der Erstellung einer Umleitung immer an, dass es sich um einen 301-Redirect handelt. In vielen Situationen wird standardmäßig auf 302 umgeleitet, wenn der Umleitungstyp nicht angegeben ist.

Apache-301-Redirects: Grundlagen

Wenn Sie nur eine einzelne URL oder eine kleine Anzahl von URLs umleiten müssen, können Sie diese ganz einfach einzeln in der Apache-Konfigurationsdatei Ihres Projekts auszeichnen.

Einfache URL-Umleitung

Für eine einzelne 301-Umleitung verwenden Sie die Redirect-Direktive in der Apache-Konfigurationsdatei. Die Syntax sieht dabei folgendermaßen aus:

Redirect 301 [alte URL] [neue URL]

Die neue URL kann auch eine externe URL sein. Auf diese Weise kann Nutzern beispielsweise die einprägsame URL example.com/store kommuniziert werden, anstatt die lange, komplizierte URL einer Amazon-Shop-Seite übermitteln zu müssen. Das nächste Beispiel leitet den Traffic von example.com/store auf eine solche Amazon-Shop-Seite um:

Redirect 301 example.com/store https://www.amazon.com/s?marketplaceID=...

Die Apache-Redirect-Direktive muss immer in den VirtualHost-Befehlsblock in der Hauptkonfigurationsdatei des Webservers aufgenommen werden. Zu finden ist die Datei standardmäßig an folgenden Orten:

  • CentOS: /etc/httpd/conf.d/example.com.conf
  • Ubuntu: /etc/apache2/sites-available/example.com.conf
Hinweis

Speicherort und Dateiname der Apache-Konfigurationsdatei können variieren – je nachdem, wie Sie oder Ihr Serveradministrator das Hosting eingerichtet haben.

Bearbeiten Sie diese Datei mit einem Editor Ihrer Wahl, z. B. mit dem Kommandozeilen-Editor nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Scrollen Sie durch die Datei, bis Sie den VirtualHost-Befehlsblock finden, der in etwa so aussieht:

<VirtualHost *:80>
ServerName example.com
  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
</VirtualHost>

Fügen Sie nun die Direktive für die Apache-Weiterleitung zum VirtualHost-Befehlsblock hinzu. Stellen Sie dabei sicher, dass Sie die Richtlinie außerhalb von Verzeichnisbefehlsblöcken platzieren:

<VirtualHost *:80>
ServerName example.com
Redirect 301 /blog https://blog.example.com
  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
</VirtualHost>

Speichern und schließen Sie die Datei und starten dann den Apache neu, damit die Änderungen wirksam werden:

CentOS:

sudo systemctl restart httpd

Ubuntu:

sudo service apache2 restart

Apache: Weiterleitung eines Verzeichnisses

Auf dem gleichen Weg können Sie auch ein Unterverzeichnis auf Ihrer aktuellen Seite umleiten. Nehmen wir beispielsweise an, der Blog Ihrer Website soll von einem Unterverzeichnis ('http://example.com/blog') in eine eigene kanonische Domain ('http://blog.example.com') verschoben werden. Die Richtlinie für den Apache-Redirect würde lauten:

Redirect 301 /blog https://blog.example.com

Umleitung von www- auf Nicht-www-Domains

Es ist üblich, die www-Version einer URL über eine „ServerAlias“-Zeile in der Apache-Konfigurationsdatei auf die Nicht-www-Version (oder umgekehrt) zu übertragen. Obwohl diese Vorgehensweise aus Besuchersicht gut funktioniert, wird es aus SEO-Sicht nicht als „Best Practice“ betrachtet. Die Verwendung von „ServerAlias“ anstelle einer 301-Umleitung birgt nämlich das Risiko, dass betreffende Inhalte als Duplicate Content gekennzeichnet werden könnten. Prinzipiell gibt es aber aus SEO-Sicht keinen Unterschied zwischen der www- und der Nicht-www-Version einer URL. Wichtig ist, dass Sie sich für eine Variante entscheiden.

Im Folgenden leiten wir den Datenverkehr der www- auf die Nicht-www-Variante um. Auch hierfür benötigen wir die Apache-Hauptkonfigurationsdatei, die Sie wieder mit dem Editor Ihrer Wahl öffnen – beispielsweise mit dem Kommandozeilen-Editor nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Suchen Sie im Befehlsblock nach folgender Zeile (mit der individuellen Domain Ihres Projekts):

ServerAlias www.example.com

Löschen Sie diese Zeile und scrollen Sie zum Ende der Datei. Fügen Sie dort folgenden neuen „VirtualHost“-Befehlsblock hinzu:

<VirtualHost *:80>
  ServerName www.example.com
  Redirect 301 / https://example.com/
</VirtualHost>

Speichern und schließen Sie die Datei. Starten Sie dann den Apache neu, damit die Änderungen wirksam werden.

Komplexe Apache-Weiterleitungen mit mod_rewrite

Für komplexere 301-Umleitungen ist das Apache-Modul mod_rewrite die beste Wahl. Dieses Modul ist schnell, flexibel und leistungsstark – und gibt Ihnen die Möglichkeit, URLs auf einfache Weise zu manipulieren. Die passenden Regeln können Sie u. a. in einer .htaccess-Datei definieren.

mod_rewrite unter CentOS aktivieren

mod_rewrite ist unter CentOS standardmäßig aktiviert. Wenn Sie feststellen, dass es nicht aktiviert wurde, können Sie es jederzeit in der Basis-Konfigurationsdatei des Moduls anschalten. Öffnen Sie die Datei hierfür zunächst mit dem nano-Editor:

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Fügen Sie die folgende Zeile hinzu oder aktivieren Sie sie, falls sie auskommentiert wurde:

LoadModule rewrite_module modules/mod_rewrite.so

Im nächsten Schritt aktivieren Sie die Verwendung von .htaccess-Dateien. Öffnen Sie dazu die Apache-Hauptkonfigurationsdatei.

sudo nano /etc/httpd/conf.d/example.com.conf

Scrollen Sie zum Hauptbefehlsblock von VirtualHost, der wie erwähnt in etwa folgendermaßen aussehen sollte:

<VirtualHost *:80>
ServerName example.com
  <Directory "/var/www/example.com/html">
  AllowOverride None
  </Directory>
</VirtualHost>

Ändern Sie den Eintrag für „AllowOverride“ von „None“ auf „All“:

AllowOverride All

Sollte der Directory-Eintrag im VirtualHost-Befehlsblock fehlen, fügen Sie ihn manuell hinzu:

  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
Hinweis

Achten Sie darauf, den richtigen Pfad zum Hauptverzeichnis Ihrer Website zu verwenden.

Speichern und beenden Sie die Datei. Starten Sie den Apache neu, damit die Änderungen wirksam werden:

sudo systemctl restart httpd

mod_rewrite unter Ubuntu aktivieren

Um mod_rewrite auf einem Ubuntu-Server zu aktivieren, verwenden Sie den folgenden Befehl:

sudo a2enmod rewrite

Starten Sie den Apache neu, damit die Änderungen wirksam werden:

sudo service apache2 restart

Als nächstes erlauben Sie die Verwendung von .htaccess-Dateien. Bearbeiten Sie dazu die Hauptkonfigurationsdatei des Apache:

sudo nano /etc/apache2/sites-available/example.com.conf

Scrollen Sie zum Hauptbefehlsblock von VirtualHost und suchen Sie dort den Verzeichnisbefehlsblock (Directory), der in etwa folgendermaßen aussehen sollte:

<Directory /var/www/example.com/html/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

In der Zeile „AllowOverride“ ersetzen Sie den Standardeintrag „None“ mit „All“:

AllowOverride All

Fehlt der Directory-Eintrag im VirtualHost-Befehlsblock, fügen Sie ihn manuell hinzu:

<Directory /var/www/example.com/html/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Speichern und beenden Sie die Datei. Starten Sie den Webserver neu, damit die Änderungen wirksam werden:

sudo service apache2 restart

.htaccess-Datei für Apache-Weiterleitung erstellen

Nachdem Sie Apache so konfiguriert haben, dass er mod_rewrite verwendet und .htaccess-Dateien zulässt, ist es an der Zeit, in das Dokumentenverzeichnis (Hauptverzeichnis) Ihrer Website zu wechseln und eine .htaccess-Datei zu erstellen.

Hinweis

Sie müssen Apache nicht neu starten, nachdem Sie Änderungen an einer .htaccess-Datei vorgenommen haben.

Haben Sie keinerlei Änderungen vorgenommen, wechseln Sie mit folgender Eingabe direkt in das Hauptverzeichnis Ihres Apache-Webservers:

cd /var/www/html

Im Verzeichnis erstellen Sie nun die .htaccess-Datei und öffnen diese mit folgendem Befehl:

sudo nano .htaccess

Geben Sie Ihre individuellen mod_rewrite-Konfigurationen an. Beginnen Sie mit einem einfachen Test, um sicherzustellen, dass alles richtig funktioniert, indem Sie folgende Zeilen zu dieser Datei hinzufügen:

RewriteEngine on
RewriteRule ^hello.html$ goodbye.html

Diese Regel leitet Anfragen für hello.html auf die Seite goodbye.html um. Speichern und beenden Sie die Datei und erstellen Sie im Anschluss die beiden HTML-Dokumente mit folgenden Befehlen:

sudo echo "Hello" >> hello.html
sudo echo "Goodbye" >> goodbye.html

Rufen Sie nun die hello.html-Page in einem Browser auf. Sie sollten per Apache-Redirect auf goodbye.html umgeleitet werden und die Meldung „Goodbye“ sehen.

Mehrere Domains per Apache-Redirect auf die gleiche URL umleiten

Es gibt mehrere Gründe, warum Sie verschiedene Domains auf dieselbe Adresse umleiten sollten:

  • Wenn Ihre Hauptseite example.com ist, können Sie den Namensraum mit dem Kauf von example.net und example.org optimal erfassen.
  • Es ist sinnvoll, typische Falschschreibweisen Ihres Domainnamens wie exampl.com oder exmple.com ebenfalls zu registrieren und in Ihre Strategie einzuschließen. So schützen Sie sich auch gegen das sogenannte Typosquatting.
  • Eventuell besitzen Sie auch einfach Varianten Ihres Domainnamens wie the-example.com oder my-example.com, deren Aufruf Besucher ebenfalls zu Ihrem Webprojekt führen soll.

Obwohl Sie diese Domainnamen auch ganz gewöhnlich auf Ihre Hauptseite umleiten können, ist es aus SEO-Sicht ratsam, 301-Umleitungen einzurichten, um Ihre gesteckten Ziele zu erreichen.

Um mehrere Domains per Apache-Redirect auf dieselbe Domain umzuleiten, aktivieren Sie zunächst wie im vorigen Abschnitt beschrieben das Modul mod_rewrite und richten eine passende .htaccess-Datei ein. Anschließend fügen Sie der .htaccess-Datei die folgenden Zeilen hinzu:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]

Im Beispiel wird der Datenverkehr von example.net nach example.com umgeleitet. Passen Sie diese Regel nun einfach an Ihre Domainnamen und die gewünschten Ergebnisse an. Um beispielsweise den Datenverkehr auf die www-Version der URL (www.example.com) umzuleiten, würden Sie Folgendes verwenden:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

Apache: HTTP auf HTTPS-Seiten umleiten: So funktioniert’s

Für die Sicherheit Ihrer Nutzer und Ihr Suchmaschinenranking ist es von elementarer Bedeutung, dass der gesamte Datenverkehr auf Ihrer Website via SSL/TLS gesichert ist. Auch für diesen Fall können Sie mit einem Apache-301-Redirect arbeiten, der Besucher automatisch auf die HTTPS-Version Ihrer Seiten weiterleitet.

Richten Sie auch in diesem Fall zunächst mod_rewrite und .htaccess-Datei ein und fügen Sie der Konfigurationsdatei dann die folgenden Zeilen hinzu:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com$1 [R=301,L]

Umbenennen von Webseiten und Verschieben von Verzeichnissen

Es gibt Situationen, in denen Sie eine bestehende Seite oder ein bestehendes Verzeichnis umbenennen müssen. Dadurch werden alle Links, die auf diese Seite verweisen, unterbrochen – was nicht nur die User Experience mindert, sondern auch Ihr SEO beeinträchtigt.

Verwenden Sie die nachfolgenden Regeln in der .htaccess-Datei (nachdem Sie mod_rewrite und .htaccess-Dateien eingerichtet haben).

Website umbenennen:

RewriteEngine on
RewriteRule ^old-page.html$ /new-page.html [R=301]

Verzeichnis umbenennen:

RewriteEngine on
RewriteRule ^old-directory/ /new-directory/ [R=301]

In den obigen Beispielen werden die Namen der Dateien und Verzeichnisse als Pfad relativ zum Hauptverzeichnis der Website angegeben. Es gibt drei Optionen für Pfade:

  • ein vollständiger Dateisystempfad wie /var/wwww/html/new-page.html
  • ein Webpfad relativ zum Hauptverzeichnis wie /new-page.html
  • eine absolute URL wie http://example.com/new-page.html

Die wichtigsten Informationen zu mod_rewrite zusammengefasst

Das Modul mod_rewrite verwendet reguläre Ausdrücke, um URLs abzugleichen und zu ersetzen. Um mod_rewrite zu aktivieren, muss die erste Zeile der Regeln in der .htaccess-Datei immer so aussehen:

RewriteEngine on

Das Herzstück von mod_rewrite sind RewriteRules. Jede RewriteRule besteht aus drei Teilen:

RewriteRule [pattern] [substitution] [flags]

Das Muster (pattern) wird mit Hilfe von regulären Ausdrücken erstellt. Folgende Ersetzungen können erfolgen:

  • ein vollständiger Dateisystempfad
  • ein Webpfad relativ zum Hauptverzeichnis
  • eine absolute URL

Flags sind optional. Einige der häufigsten sind:

  • L: zeigt an, dass dies die letzte in einer Reihe von Regeln ist
  • R=301: erzwingt eine 301-Umleitung
  • NC: ignoriert Groß-/Kleinschreibung, damit die Regel nicht zwischen Groß- und Kleinschreibung unterscheidet

Eine vollständige Liste der verfügbaren Flags finden Sie auf der offiziellen Apache-Website.

In manchen Fällen wird eine RewriteRule durch eine RewriteCond eingeleitet. Hiermit wird festgelegt, unter welchen Bedingungen die RewriteRule greift. Eine RewriteCond besteht ebenfalls aus drei Teilen:

RewriteCond [test string] [condition] [flags]

Der Test-String ist typischerweise eine Servervariable mit dem Format %{VARIABLE NAME}.

Es gibt drei Arten von Bedingungen (condition):

  • reguläre Ausdrücke
  • Zeichenkettenvergleiche
  • Datei-/Pfad-Tests

Flags sind auch in diesem Fall optional. Für die RewriteCond stehen drei Flags zur Verfügung:

  • NC: ignoriert Groß-/Kleinschreibung, sodass die Bedingung nicht zwischen Groß- und Kleinschreibung unterscheidet
  • ODER: logisches „oder“
  • NV („No Vary“): der Headername wird nicht in den Vary-Antwort-Header eingefügt

Was unterscheidet RewriteRule und Umleitung?

Sowohl RewriteRule als auch Apache-301-Redirect können in einer .htaccess-Datei ausgezeichnet werden, um den Website-Verkehr umzuleiten. Der Hauptunterschied besteht darin, dass eine RewriteRule durch das Modul mod_rewrite und eine Umleitung durch das Modul mod_alias umgesetzt wird.

mod_rewrite

mod_alias

verwendet RewriteRule und RewriteCond

verwendet Redirect und RedirectMatch

sehr vielseitig, da es reguläre Ausdrücke verwendet, um URLs abzugleichen und zu ersetzen

nicht so stark konfigurierbar

kann schwierig zu bedienen sein

einfach zu bedienen

möglicherweise nicht installiert oder standardmäßig aktiviert

in den meisten Apache-Installationen bereits standardmäßig aktiviert