Apache-Wei­ter­lei­tun­gen bzw. -Um­lei­tun­gen sind für eine Vielzahl von Si­tua­tio­nen nützlich. Unter anderem können Sie mit den prak­ti­schen Redirects Besucher von der HTTP- zur HTTPS-Version Ihrer Website lenken, Da­ten­ver­kehr von einer www- auf eine Nicht-www-URL umleiten oder auch Website- und Ver­zeich­nis­na­men ändern. Wir helfen Ihnen dabei, Apache-Redirects auf CentOS und Ubuntu zu verstehen und zu kon­fi­gu­rie­ren.

Dedicated Server
De­di­zier­te Server mit mo­derns­ten Pro­zes­so­ren
  • 100 % En­ter­pri­se-Hardware
  • Kon­fi­gu­rier­ba­re Hardware-Aus­stat­tung
  • ISO-zer­ti­fi­zier­te Re­chen­zen­tren

301- oder 302-Redirect: Was ist der Un­ter­schied?

Be­trach­tet man Weiter- bzw. Um­lei­tun­gen, gilt es ins­be­son­de­re zwischen 301- und 302-Redirects zu un­ter­schei­den. Ersterer Sta­tus­code (301) steht dabei für eine per­ma­nen­te, während letzterer (302) eine temporäre Umleitung kenn­zeich­net.

Eine 301-Umleitung ist aus SEO-Sicht weitaus wün­schens­wer­ter. Trifft ein Such­ma­schi­nen-Crawler nämlich auf einen solchen Redirect, versteht er, dass es sich um eine per­ma­nen­te Umleitung handelt. Er notiert aus diesem Grund nicht nur die neue URL, sondern leitet auch den Prozess der Über­tra­gung eines be­lie­bi­gen 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 Wie­der­ho­lungs­be­such ir­gend­wann 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 Er­stel­lung einer Umleitung immer an, dass es sich um einen 301-Redirect handelt. In vielen Si­tua­tio­nen wird stan­dard­mä­ßig auf 302 um­ge­lei­tet, wenn der Um­lei­tungs­typ nicht angegeben ist.

Apache-301-Redirects: Grund­la­gen

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-Kon­fi­gu­ra­ti­ons­da­tei Ihres Projekts aus­zeich­nen.

Einfache URL-Umleitung

Für eine einzelne 301-Umleitung verwenden Sie die Redirect-Direktive in der Apache-Kon­fi­gu­ra­ti­ons­da­tei. Die Syntax sieht dabei fol­gen­der­ma­ßen aus:

Redirect 301 [alte URL] [neue URL]

Die neue URL kann auch eine externe URL sein. Auf diese Weise kann Nutzern bei­spiels­wei­se die ein­präg­sa­me URL example.com/store kom­mu­ni­ziert werden, anstatt die lange, kom­pli­zier­te URL einer Amazon-Shop-Seite über­mit­teln 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 Vir­tu­al­Host-Be­fehls­block in der Haupt­kon­fi­gu­ra­ti­ons­da­tei des Web­ser­vers auf­ge­nom­men werden. Zu finden ist die Datei stan­dard­mä­ßig an folgenden Orten:

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

Spei­cher­ort und Dateiname der Apache-Kon­fi­gu­ra­ti­ons­da­tei können variieren – je nachdem, wie Sie oder Ihr Ser­ver­ad­mi­nis­tra­tor das Hosting ein­ge­rich­tet haben.

Be­ar­bei­ten Sie diese Datei mit einem Editor Ihrer Wahl, z. B. mit dem Kom­man­do­zei­len-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 Vir­tu­al­Host-Be­fehls­block 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-Wei­ter­lei­tung zum Vir­tu­al­Host-Be­fehls­block hinzu. Stellen Sie dabei sicher, dass Sie die Richt­li­nie außerhalb von Ver­zeich­nis­be­fehls­blö­cken plat­zie­ren:

<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 Än­de­run­gen wirksam werden:

CentOS:

sudo systemctl restart httpd

Ubuntu:

sudo service apache2 restart

Apache: Wei­ter­lei­tung eines Ver­zeich­nis­ses

Auf dem gleichen Weg können Sie auch ein Un­ter­ver­zeich­nis auf Ihrer aktuellen Seite umleiten. Nehmen wir bei­spiels­wei­se an, der Blog Ihrer Website soll von einem Un­ter­ver­zeich­nis ('http://example.com/blog') in eine eigene ka­no­ni­sche Domain ('http://blog.example.com') ver­scho­ben werden. Die Richt­li­nie 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 „Ser­ve­r­A­li­as“-Zeile in der Apache-Kon­fi­gu­ra­ti­ons­da­tei auf die Nicht-www-Version (oder umgekehrt) zu über­tra­gen. Obwohl diese Vor­ge­hens­wei­se aus Be­su­cher­sicht gut funk­tio­niert, wird es aus SEO-Sicht nicht als „Best Practice“ be­trach­tet. Die Ver­wen­dung von „Ser­ve­r­A­li­as“ anstelle einer 301-Umleitung birgt nämlich das Risiko, dass be­tref­fen­de Inhalte als Duplicate Content ge­kenn­zeich­net werden könnten. Prin­zi­pi­ell gibt es aber aus SEO-Sicht keinen Un­ter­schied zwischen der www- und der Nicht-www-Version einer URL. Wichtig ist, dass Sie sich für eine Variante ent­schei­den.

Im Folgenden leiten wir den Da­ten­ver­kehr der www- auf die Nicht-www-Variante um. Auch hierfür benötigen wir die Apache-Haupt­kon­fi­gu­ra­ti­ons­da­tei, die Sie wieder mit dem Editor Ihrer Wahl öffnen – bei­spiels­wei­se mit dem Kom­man­do­zei­len-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 Be­fehls­block nach folgender Zeile (mit der in­di­vi­du­el­len 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 „Vir­tu­al­Host“-Be­fehls­block 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 Än­de­run­gen wirksam werden.

Komplexe Apache-Wei­ter­lei­tun­gen mit mod_rewrite

Für kom­ple­xe­re 301-Um­lei­tun­gen ist das Apache-Modul mod_rewrite die beste Wahl. Dieses Modul ist schnell, flexibel und leis­tungs­stark – und gibt Ihnen die Mög­lich­keit, URLs auf einfache Weise zu ma­ni­pu­lie­ren. Die passenden Regeln können Sie u. a. in einer .htaccess-Datei de­fi­nie­ren.

mod_rewrite unter CentOS ak­ti­vie­ren

mod_rewrite ist unter CentOS stan­dard­mä­ßig aktiviert. Wenn Sie fest­stel­len, dass es nicht aktiviert wurde, können Sie es jederzeit in der Basis-Kon­fi­gu­ra­ti­ons­da­tei des Moduls an­schal­ten. Ö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 ak­ti­vie­ren Sie sie, falls sie aus­kom­men­tiert wurde:

LoadModule rewrite_module modules/mod_rewrite.so

Im nächsten Schritt ak­ti­vie­ren Sie die Ver­wen­dung von .htaccess-Dateien. Öffnen Sie dazu die Apache-Haupt­kon­fi­gu­ra­ti­ons­da­tei.

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

Scrollen Sie zum Haupt­be­fehls­block von Vir­tu­al­Host, der wie erwähnt in etwa fol­gen­der­ma­ßen aussehen sollte:

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

Ändern Sie den Eintrag für „Al­lo­wO­ver­ri­de“ von „None“ auf „All“:

AllowOverride All

Sollte der Directory-Eintrag im Vir­tu­al­Host-Be­fehls­block fehlen, fügen Sie ihn manuell hinzu:

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

Achten Sie darauf, den richtigen Pfad zum Haupt­ver­zeich­nis Ihrer Website zu verwenden.

Speichern und beenden Sie die Datei. Starten Sie den Apache neu, damit die Än­de­run­gen wirksam werden:

sudo systemctl restart httpd

mod_rewrite unter Ubuntu ak­ti­vie­ren

Um mod_rewrite auf einem Ubuntu-Server zu ak­ti­vie­ren, verwenden Sie den folgenden Befehl:

sudo a2enmod rewrite

Starten Sie den Apache neu, damit die Än­de­run­gen wirksam werden:

sudo service apache2 restart

Als nächstes erlauben Sie die Ver­wen­dung von .htaccess-Dateien. Be­ar­bei­ten Sie dazu die Haupt­kon­fi­gu­ra­ti­ons­da­tei des Apache:

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

Scrollen Sie zum Haupt­be­fehls­block von Vir­tu­al­Host und suchen Sie dort den Ver­zeich­nis­be­fehls­block (Directory), der in etwa fol­gen­der­ma­ßen aussehen sollte:

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

In der Zeile „Al­lo­wO­ver­ri­de“ ersetzen Sie den Stan­dard­ein­trag „None“ mit „All“:

AllowOverride All

Fehlt der Directory-Eintrag im Vir­tu­al­Host-Be­fehls­block, 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 Än­de­run­gen wirksam werden:

sudo service apache2 restart

.htaccess-Datei für Apache-Wei­ter­lei­tung erstellen

Nachdem Sie Apache so kon­fi­gu­riert haben, dass er mod_rewrite verwendet und .htaccess-Dateien zulässt, ist es an der Zeit, in das Do­ku­men­ten­ver­zeich­nis (Haupt­ver­zeich­nis) Ihrer Website zu wechseln und eine .htaccess-Datei zu erstellen.

Hinweis

Sie müssen Apache nicht neu starten, nachdem Sie Än­de­run­gen an einer .htaccess-Datei vor­ge­nom­men haben.

Haben Sie keinerlei Än­de­run­gen vor­ge­nom­men, wechseln Sie mit folgender Eingabe direkt in das Haupt­ver­zeich­nis Ihres Apache-Web­ser­vers:

cd /var/www/html

Im Ver­zeich­nis erstellen Sie nun die .htaccess-Datei und öffnen diese mit folgendem Befehl:

sudo nano .htaccess

Geben Sie Ihre in­di­vi­du­el­len mod_rewrite-Kon­fi­gu­ra­tio­nen an. Beginnen Sie mit einem einfachen Test, um si­cher­zu­stel­len, dass alles richtig funk­tio­niert, indem Sie folgende Zeilen zu dieser Datei hin­zu­fü­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 um­ge­lei­tet werden und die Meldung „Goodbye“ sehen.

Mehrere Domains per Apache-Redirect auf die gleiche URL umleiten

Es gibt mehrere Gründe, warum Sie ver­schie­de­ne Domains auf dieselbe Adresse umleiten sollten:

  • Wenn Ihre Haupt­sei­te example.com ist, können Sie den Na­mens­raum mit dem Kauf von example.net und example.org optimal erfassen.
  • Es ist sinnvoll, typische Falsch­schreib­wei­sen Ihres Do­main­na­mens wie exampl.com oder exmple.com ebenfalls zu re­gis­trie­ren und in Ihre Strategie ein­zu­schlie­ßen. So schützen Sie sich auch gegen das so­ge­nann­te Ty­po­s­quat­ting.
  • Eventuell besitzen Sie auch einfach Varianten Ihres Do­main­na­mens wie the-example.com oder my-example.com, deren Aufruf Besucher ebenfalls zu Ihrem Web­pro­jekt führen soll.

Obwohl Sie diese Do­main­na­men auch ganz ge­wöhn­lich auf Ihre Haupt­sei­te umleiten können, ist es aus SEO-Sicht ratsam, 301-Um­lei­tun­gen ein­zu­rich­ten, um Ihre ge­steck­ten Ziele zu erreichen.

Um mehrere Domains per Apache-Redirect auf dieselbe Domain um­zu­lei­ten, ak­ti­vie­ren Sie zunächst wie im vorigen Abschnitt be­schrie­ben das Modul mod_rewrite und richten eine passende .htaccess-Datei ein. An­schlie­ß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 Da­ten­ver­kehr von example.net nach example.com um­ge­lei­tet. Passen Sie diese Regel nun einfach an Ihre Do­main­na­men und die ge­wünsch­ten Er­geb­nis­se an. Um bei­spiels­wei­se den Da­ten­ver­kehr auf die www-Version der URL (www.example.com) um­zu­lei­ten, 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 funk­tio­niert’s

Für die Si­cher­heit Ihrer Nutzer und Ihr Such­ma­schi­nen­ran­king ist es von ele­men­ta­rer Bedeutung, dass der gesamte Da­ten­ver­kehr auf Ihrer Website via SSL/TLS gesichert ist. Auch für diesen Fall können Sie mit einem Apache-301-Redirect arbeiten, der Besucher au­to­ma­tisch auf die HTTPS-Version Ihrer Seiten wei­ter­lei­tet.

Richten Sie auch in diesem Fall zunächst mod_rewrite und .htaccess-Datei ein und fügen Sie der Kon­fi­gu­ra­ti­ons­da­tei dann die folgenden Zeilen hinzu:

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

Um­be­nen­nen von Webseiten und Ver­schie­ben von Ver­zeich­nis­sen

Es gibt Si­tua­tio­nen, in denen Sie eine be­stehen­de Seite oder ein be­stehen­des Ver­zeich­nis um­be­nen­nen müssen. Dadurch werden alle Links, die auf diese Seite verweisen, un­ter­bro­chen – was nicht nur die User Ex­pe­ri­ence mindert, sondern auch Ihr SEO be­ein­träch­tigt.

Verwenden Sie die nach­fol­gen­den Regeln in der .htaccess-Datei (nachdem Sie mod_rewrite und .htaccess-Dateien ein­ge­rich­tet haben).

Website um­be­nen­nen:

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

Ver­zeich­nis um­be­nen­nen:

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

In den obigen Bei­spie­len werden die Namen der Dateien und Ver­zeich­nis­se als Pfad relativ zum Haupt­ver­zeich­nis der Website angegeben. Es gibt drei Optionen für Pfade:

  • ein voll­stän­di­ger Da­tei­sys­tempfad wie /var/wwww/html/new-page.html
  • ein Webpfad relativ zum Haupt­ver­zeich­nis wie /new-page.html
  • eine absolute URL wie http://example.com/new-page.html

Die wich­tigs­ten In­for­ma­tio­nen zu mod_rewrite zu­sam­men­ge­fasst

Das Modul mod_rewrite verwendet reguläre Ausdrücke, um URLs ab­zu­glei­chen und zu ersetzen. Um mod_rewrite zu ak­ti­vie­ren, muss die erste Zeile der Regeln in der .htaccess-Datei immer so aussehen:

RewriteEngine on

Das Herzstück von mod_rewrite sind Re­wri­te­Rules. Jede Re­wri­te­Rule besteht aus drei Teilen:

RewriteRule [pattern] [substitution] [flags]

Das Muster (pattern) wird mit Hilfe von regulären Aus­drü­cken erstellt. Folgende Er­set­zun­gen können erfolgen:

  • ein voll­stän­di­ger Da­tei­sys­tempfad
  • ein Webpfad relativ zum Haupt­ver­zeich­nis
  • eine absolute URL

Flags sind optional. Einige der häu­figs­ten sind:

  • L: zeigt an, dass dies die letzte in einer Reihe von Regeln ist
  • R=301: erzwingt eine 301-Umleitung
  • NC: ignoriert Groß-/Klein­schrei­bung, damit die Regel nicht zwischen Groß- und Klein­schrei­bung un­ter­schei­det

Eine voll­stän­di­ge Liste der ver­füg­ba­ren Flags finden Sie auf der of­fi­zi­el­len Apache-Website.

In manchen Fällen wird eine Re­wri­te­Rule durch eine Re­wri­te­Cond ein­ge­lei­tet. Hiermit wird fest­ge­legt, unter welchen Be­din­gun­gen die Re­wri­te­Rule greift. Eine Re­wri­te­Cond besteht ebenfalls aus drei Teilen:

RewriteCond [test string] [condition] [flags]

Der Test-String ist ty­pi­scher­wei­se eine Ser­ver­va­ria­ble mit dem Format %{VARIABLE NAME}.

Es gibt drei Arten von Be­din­gun­gen (condition):

  • reguläre Ausdrücke
  • Zei­chen­ket­ten­ver­glei­che
  • Datei-/Pfad-Tests

Flags sind auch in diesem Fall optional. Für die Re­wri­te­Cond stehen drei Flags zur Verfügung:

  • NC: ignoriert Groß-/Klein­schrei­bung, sodass die Bedingung nicht zwischen Groß- und Klein­schrei­bung un­ter­schei­det
  • ODER: logisches „oder“
  • NV („No Vary“): der Hea­der­na­me wird nicht in den Vary-Antwort-Header eingefügt

Was un­ter­schei­det Re­wri­te­Rule und Umleitung?

Sowohl Re­wri­te­Rule als auch Apache-301-Redirect können in einer .htaccess-Datei aus­ge­zeich­net werden, um den Website-Verkehr um­zu­lei­ten. Der Haupt­un­ter­schied besteht darin, dass eine Re­wri­te­Rule durch das Modul mod_rewrite und eine Umleitung durch das Modul mod_alias umgesetzt wird.

mod_rewrite mod_alias
verwendet Re­wri­te­Rule und Re­wri­te­Cond verwendet Redirect und Re­di­rect­Match
sehr viel­sei­tig, da es reguläre Ausdrücke verwendet, um URLs ab­zu­glei­chen und zu ersetzen nicht so stark kon­fi­gu­rier­bar
kann schwierig zu bedienen sein einfach zu bedienen
mög­li­cher­wei­se nicht in­stal­liert oder stan­dard­mä­ßig aktiviert in den meisten Apache-In­stal­la­tio­nen bereits stan­dard­mä­ßig aktiviert
Zum Hauptmenü