Home / WebServer / Apache / QuickTipp: Weiterleitung (redirect) von HTTP auf HTTPS via Apache oder Htaccess
apache logo

QuickTipp: Weiterleitung (redirect) von HTTP auf HTTPS via Apache oder Htaccess

Sensible Webseiten-Daten sollten grundsätzlich immer via SSL Verschlüsseltung ausgeliefert werden (HTTPS statt HTTP). Ich zeige in diesem QuickTipp wie die Weiterleitung von HTTP auf HTTPS eingerichtet wird sodass auch Parameter erhalten bleiben.

Eine SSL Verschlüsselung ist grundsätzlich einge gute Idee sensible Daten gegen Dritte zu schützen. Aber was bringt es wenn das SSL Zertifikat am Root Server / managed Server installiert und die Verschlüsselung aktiviert ist, aber die Webseite trotzdem noch per HTTP erreichbar ist? HTTP muss daher auf HTTPS weitergeleitet werden. Je nachdem welche Bereiche man schützen will kann man die Konfiguration erweitern,  sodass sie nur für gewisse Verzeichnisse oder Anfragen greift.

Voraussetzung: Apache rewrite Modul aktiviert und Webserver bereits via HTTP und HTTPS erreichbar.

HTTP auf HTTPS weiterleiten via htaccess

Die .htaccess Datei sollte direkt im Root Verzeichnis der Webseite liegen. In meinem Beispiel werden sämtliche Webseiten Aufrufe, welche per HTTP auf den Server kommen, auf HTTPS umgeschrieben. Für den User bleibt dieser Vorgang eigentlich völlig unbemerkt, da der Prozess im Hintergrund statt findet.

[bash]<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>[/bash]

Zeile 1: überprüft ob das Modul mod_rewrite aktiviert ist
Zeile 2: aktiviert die Rewrite Engine
Zeile 3: überprüft ob HTTPS eingeschaltet ist, wenn nicht führt er den Inhalt von Zeile 4 aus
Zeile 4: leitet sämtliche Anfragen via Statuscode 301 (permanent redirect) auf HTTPS um

Warum Status Code 301 und nicht 302?

Standardmäßig wird in der RewriteRule mit R (Redirect) die Weiterleitung definiert. Diese liefert den HTML Statuscode 302 (found), also eine Temporäre Weiterleitung zurück. Wir definieren aber explizit den Status Code 301 (permanent redirect) für eine Permanente Weiterleitung.

Das ist gerade für SEOs in der Suchmaschinenoptimierung sehr wichtig, wenn bereits Backlinks auf die Webseite mit HTTP existieren. Die Linkkraft wird mit einem 301 Redirect direkt und ohne Verlust auf die HTTPS Seite übertragen, ohne dabei an Ranking zu verlieren.

Matt Cutts über 301 Weiterleitungen

Weiterleitung von HTTP auf HTTPS über die Apache Konfiguration

Die Rewrite Regeln müssen nicht unbedingt in einer htacccess Datei stehen, sondern können direkt in der Apache Konfiguration eingetragen werden. zb:. wie folgt in der vHost Konfiguration:

[bash]<Virtualhost vhost.domain.com>
ServerName vhost.domain.com
DocumentRoot /var/www/website1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
</Virtualhost>[/bash]

Sämtliche Aufrufe auf die Website http://vhost.domain.com werden auf https://vhost.domain.com umgeleitet. Voraussetzung ist natürlich dass die Webseite auch für SSL konfiguriert wurde.

Weitere Informationen zu Apache Rewrite gibts in der offiziellen Dokumentation

3.6/5 - (20 votes)

Auch cool

Linux richtig anwenden: Tipps und Tricks für eine optimale Erfahrung

Die Kombination aus Spiele-Plattformen, und dem Betriebssystem Linux mag auf den ersten Blick ungewöhnlich erscheinen. …

12 Kommentare

  1. danköööö

  2. Danke für die Anleitung, auch wenn ich sie leider nicht brauche, da ich keine sensible Webseite habe! 🙂

  3. Danke 🙂

  4. Vielen Dank für die Anleitung! Eine Frage hierzu: Wenn ich eine bestimmte Subdomain z.B. sub.domain.de von der Weiterleitung ausschließen möchte, wie muss dann die Zeile 4 in der htaccess heißen? Danke im Voraus!

  5. Danke! Genau das, was ich gesucht habe.

  6. Hallo,

    komme echt nicht weiter, erst too many connections und dann internal server error 500. in meiner htaccess datei steht:

    Options FollowSymLinks
    RewriteEngine On

    RewriteRule ^admin$ admin/index.php [L]
    RewriteRule ^admin/$ admin/index.php [L]

    RewriteCond %{HTTP_HOST} ^DOMAINNAME\.de [NC]
    RewriteRule ^(.*)/$ $1 [R=301,L]

    RewriteRule ^css/([^_]+)$ css/$1 [L]
    RewriteRule ^fancybox/([^_]+)$ fancybox/$1 [L]
    RewriteRule ^grafika/([^_]+)$ grafik/$1 [L]
    RewriteRule ^js/([^_]+)$ js/$1 [L]
    RewriteRule ^smarty/([^_]+)$ smarty/$1 [L]
    RewriteRule ^templates/([^_]+)$ templates/$1 [L]
    RewriteRule ^templates_c/([^_]+)$ templates_c/$1 [L]

    RewriteRule ^anmelden-registrieren$ index.php?mod=loging [L]
    RewriteRule ^warenkorb$ index.php?mod=konto&p=warenkorb[L]

    in der index.php steht folgendes:

  7. Habe die HTTP auf HTTPS Umleitung gemäss diesem Artikel implenentiert. Funktioniert prima, danke!

  8. Dankeschön für den guten Tipp und die ausführliche Anleitung!

    Hinweis – kleiner Schreibfehler im Text ganz oben oben:
    falsch: HTTP muss daher auf HTTP weitergeleitet werden.
    richtig: HTTP muss daher auf HTTPS weitergeleitet werden.

  9. Vielen dank! Es funktioniert einwandfrei.

  10. Tolle Anleitung, vielen Dank. Ich musste allerdings die erste Zeile anpassen, damit es funktioniert:

    Vorher:
    ifmodule mod_rewrite.c=““

    Nachher:
    ifmodule mod_rewrite.c

    Was bewirkt =““ eigentlich?

    Viele Grüße

    Flo