# 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.

## 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](https://www.ionos.de/digitalguide/online-marketing/suchmaschinenmarketing/was-ist-ein-crawler/ "Was ist ein 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:

```none
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:

```none
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:**

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

**Ubuntu:**

```none
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:

```none
<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:

```none
<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:**

```none
sudo systemctl restart httpd
```

**Ubuntu:**

```none
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:

```none
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](https://www.ionos.de/digitalguide/online-marketing/suchmaschinenmarketing/was-ist-duplicate-content/ "Was ist 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:**

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

**Ubuntu:**

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

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

```none
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:

```none
<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](https://www.ionos.de/digitalguide/hosting/hosting-technik/htaccess-tricks/ ".htaccess-Tricks") 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:

```none
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:

```none
LoadModule rewrite_module modules/mod_rewrite.so
```

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

```none
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:

```none
<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**“:

```none
AllowOverride All
```

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

```none
<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:

```none
sudo systemctl restart httpd
```

### mod\_rewrite unter Ubuntu aktivieren

Um mod\_rewrite auf einem Ubuntu-Server zu aktivieren, verwenden Sie den folgenden Befehl:

```none
sudo a2enmod rewrite
```

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

```none
sudo service apache2 restart
```

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

```none
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:

```none
<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**“:

```none
AllowOverride All
```

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

```none
<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:

```none
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:

```none
cd /var/www/html
```

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

```none
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:

```none
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:

```none
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](https://www.ionos.de/digitalguide/domains/domaintipps/so-schuetzen-sie-ihre-domain-vor-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:

```none
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:

```none
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](https://www.ionos.de/digitalguide/websites/webseiten-erstellen/wie-stelle-ich-meine-seite-auf-ssl-und-https-um/ "Wie stelle ich meine Seite auf SSL und HTTPS um?") 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:

```none
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:**

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

**Verzeichnis umbenennen:**

```none
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:

```none
RewriteEngine on
```

Das **Herzstück** von mod\_rewrite sind **RewriteRules**. Jede RewriteRule besteht aus drei Teilen:

```none
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](https://httpd.apache.org/docs/current/rewrite/flags.html "Apache: RewriteRule-Flags im Überblick").

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:

```none
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.

<table>
  <tbody>
    <tr>
      <td><strong>mod\_rewrite</strong></td>
      <td><strong>mod\_alias</strong></td>
    </tr>
    <tr>
      <td>verwendet RewriteRule und RewriteCond</td>
      <td>verwendet Redirect und RedirectMatch</td>
    </tr>
    <tr>
      <td>sehr vielseitig, da es reguläre Ausdrücke verwendet, um URLs abzugleichen und zu ersetzen</td>
      <td>nicht so stark konfigurierbar</td>
    </tr>
    <tr>
      <td>kann schwierig zu bedienen sein</td>
      <td>einfach zu bedienen</td>
    </tr>
    <tr>
      <td>möglicherweise nicht installiert oder standardmäßig aktiviert</td>
      <td>in den meisten Apache-Installationen bereits standardmäßig aktiviert</td>
    </tr>
  </tbody>
</table>


This is a markdown version of: [https://www.ionos.de/digitalguide/server/konfiguration/umleitungen-mit-apache/](https://www.ionos.de/digitalguide/server/konfiguration/umleitungen-mit-apache/) for AI/LLM consumption.