Beitrag wurde zuletzt am aktualisiert

Weiterleitung von http zu https

301 Redirect von http nach https301 Redirect von http nach https

Der richtige Redirects bei Umstellung auf SSL-verschlüsselte Erreichbarkeit der Website







Der Einsatz von HTTPS (Hypertext Transfer Protocol Secure) ist immer dann sinnvoll, wenn bei der Kommunikation zwischen dem Webserver und dem Browser des Besuchers einer Webeite sensible Daten ausgetauscht werden.

Ich setze diese verschlüsselten Verbindungen grundsätzlich bei administrativen Webtools wie phpMyAdmin oder ISP-Anwendungen (Plesk, Confixx usw.) ein. Da aber fast jede Internetseite auch einen Login-Bereich für die Redaktion besitzt, sollte zumindest auch diese Verbindung ausschließlich verschlüsselt stattfinden.

Den Datenschutz beachten!

Pflicht ist HTTPS für Shop-Betreiber, Banken, Versicherungen und alle anderen Websites, die vertrauliche Daten vom Nutzer abfragen. Das können bereits Informationen wie die Anschrift oder Kontaktinformationen sein. Kreditkartendaten unverschlüsselt im Bestellprozess eines Online-Shops abzufragen, wäre für mich ein K.O.-Kriterium. Spätestens an dieser Stelle würde ich den Einkauf abbrechen und meine Anschaffungen bei einem anderen Online-Shop tätigen.

Ebenso wichtig ist hierbei, dass es sich um ein Zertifikat mit einer qualifizierten Signatur handelt. Auch wenn das ein paar Euro im Jahr kostet und ein selbst signiertes Zertifikat für die selbe Verschlüsselung sorgen würde. Letztere sind allerdings für die bereits angesprochenen Admin-Tools vollkommen ausreichend. Shops und andere größere Seiten sollten sicher auf ein Extended-Validation-Zertifikat (EV) setzen, um bereits im Webbrowser ein größeres Vertrauen zu schaffen.

Let’s Encrypt macht SSL/ HTTPS für alle möglich

Update: Seit 2016 ist Dank Let’s Encrypt der verschlüsselte Betrieb eines Internetauftritts nun auch für jeden kostenfrei machbar. Einige Hosting-Anbieter, so z.B. All-Inkl.com, Strato, 1und1 usw., stellen eine kostenfreie SSL-Verschlüsselung (ja nach Paket) bereit. Bei anderen Anbietern kostet es unter Umständen einen kleinen monatlichen Betrag, was jedem Website-Betreiber die zusätzliche Sicherheit wert sein sollte.

Hat man einen eigenen v- oder root-Server ist die Nutzung von Let’s Encrypt völlig unproblemtisch, gut dokumentiert und unter Linux-System schnell implementiert.

Redirect von HTTP zu HTTPS

Ich möchte mich in diesem Artikel darauf beschränken, dass ein Aufruf einer bestimmten Website ausschließlich über HTTPS erreichbar sein soll. Egal ob das Protokoll explizit beim Aufruf der URL eingegeben wurde oder nicht. Es wird automatisch per Statuscode 301 auf das verschlüsselte Übertragungsprotokoll HTTPS umgeleitet.

Eine nur teilweise unter https betriebene Internetseite, z.B. beim Checkout-Prozess in einem Online-Shop oder bei der Übertragung von Formulardaten, fürht immer wieder zu technischen Schwierigkeiten. Oftmals sind dann alle Seiten unter http und https erreichbar oder es kommt zu Zertifikatsfehlern bei Änderungen der Subdomain. Heutezutage gibt es keinen Grund mehr, den Webauftritt aus Performance- oder anderen Gründen nicht komplett auf eine SSL-Verschlüsselung umzustellen.

Weiterleitung von HTTP zu HTTPS per htaccess-Datei

Wer die Apache-Konfigurationen bei seinem Webspace-Anbieter bereits über die jeweilige ISP-Anwendung vorgenommen hat, braucht sich eigentlich nur noch um die htaccess-Datei zu kümmern, die für die korrekte Weiterleitung sorgt. Die Datei namens .htaccess muss im Wurzelverzeichnis des per HTTP erreichbaren Webprojekts liegen und benötigt, ggf. neben weiteren Anweisungen, die folgen 3 Zeilen Konfigurationscode.

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

In der 1. Zeile wird die RewriteEngine aktiviert. In der 2. Zeile wird bei einem Aufruf „nachgesehen“, ob es sich beim Server-Port nicht um Port 443 (HTTPS) handelt. Ist das der Fall, so wird in der 3. Zeile die Anfrage per 301 Redirect an die HTTPS-Seite des angeforderten Hosts weiter geleitet.

Andere Conditions, wie beispielsweise

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

funktionieren natürlich auch. Hier gibt es letztendlich mehrere Varianten, die am Ende zum selben Ergebnis führen.

Warum der Statuscode 301?

Der Status 301 besagt, dass es sich bei dieser Weiterleitung um einen permanenten Redirect handelt und die angeforderten Dokumente ab sofort nur noch unter der neuen URL abgerufen werden können.

Dies wird dann wichtig, wenn es sich bei der verschlüsselten Seite nicht um ein Tool eines Server-Administrators handelt, sondern um Inhalte, die natürlich auch bei Google auf den Suchergebnisseiten auftauchen sollen. Sicherlich hat man bereits Verweise (Backlinks) auf die HTTP-Seite, wenn diese bislang unverschlüsselt betrieben wurde, und möchte deren „Wert für Google“ sowie die Besucher die darüber kommen, natürlich nicht verlieren. Kümmert man sich in diesem Fall nur halbherzig um die Weiterleitung der Besucher, hat man vermutlich nur einen 302 Redirect angelegt. Das führt dazu, dass Webbrowser, Proxys und Suchmaschinen-Crawler davon ausgehen (müssen), dass die alte Seite irgendwann wieder kommt und die https-Seite nur als Übergangslösung ansehen.

Da sich mit HTTP und HTTPS ohne weiteres zwei inhaltlich völlig unterschiedliche Webseiten unter einer Domain betreiben lassen, müssen natürlich auch Google & Co. davon ausgehen, dass dem so ist. Somit kann Google auch die Linkpower der HTTP-Seite nicht einfach auf die SSL-verschlüsselte Webseite übernehmen.

Die Server-Konfiguration

Mit einem root-Server hat man natürlich Zugriff auf die Apache-Konfiguration und den sicherlich vorhandenen Konfigurationen der virtuellen Hosts. An dieser Stelle favorisiere ich die notwendigen Einstellungen. Aber die bereits beschriebene Einbindung der RewirteRule per htaccess-Datei erfüllt natürlich ihren Zweck. Auf die weiteren Voraussetzungen zur SSL-Verschlüsselung möchte ich in diesem Artikel nicht weiter eingehen, hier für gibt es sehr gute Tutorials bei Tim Bormann.

Virtuelle Host-Konfiguration für Port 80 (HTTP)

#Redirect von HTTP -> HTTPS (Port 80 -> Port 443)
<VirtualHost 93.180.156.238:80>
    ServerName www.redirect301.de:80
    ServerAlias redirect301.de
    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

Ausschnitt meiner virtuellen Host-Konfiguration für Port 443 (HTTPS)

#SSL-Zertifikat ist für ssl.redirect301.de ausgestellt
<VirtualHost 109.239.49.203:443>
    ServerName ssl.redirect301.de:443
    <IfModule mod_ssl.c>
        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3
        SSLCompression off
        SSLHonorCipherOrder On
        Header add Strict-Transport-Security "max-age=86400"
        SSLCertificateFile /etc/letsencrypt/live/redirect301.de/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/redirect301.de/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/redirect301.de/fullchain.pem
        SSLCACertificateFile /etc/letsencrypt/live/redirect301.de/fullchain.pem
    </IfModule>
    ...
    <Directory "/pfad/zur/ssl/webseite">
        ...
    </Directory>
</VirtualHost>
SSL-Zertifikats-Check unter ssllabs.com

SSL-Zertifikats-Check unter ssllabs.com

Das sollte es gewesen sein! Falls ihr Fragen oder Anregungen zu diesem Thema habt, dann nutzt bitte die Kommentar-Funktion oder sprecht mich bei Facebook oder Google+ an.

37 Kommentare zu "Weiterleitung von http zu https"

  1. Danke sehr hilfreich.

  2. Vielen Dank für diese Zusammenfassung, sie hat sehr weitergeholfen. Ich habe das halbe Internet danach durchsucht. Frage mich nur ob Google irgendwann sauer wird wenn man es bei einem 302 beläst? Also eine angebliche temporäre Umleitung die aber permanent bleibt.

  3. Super Anleitung mal wieder von dir. Sag meinst du es wäre schon Sinnvoll bei einem Kontaktformular die Daten zu verschlüsseln? Oder wäre das mit Kanonen auf Spatzen geschossen?

  4. Kommt sicher auf dein Themenumfeld an! Für ein „Könnten Sie mir die neusten Prospekte Ihrer Ferienwohnung zukommen lassen…“ ist es sicher nicht nötig.

    Überlege einfach, ob die Nutzer deines Formulars die zu machenden Angaben, auch einfach so ihrem Chef oder dem Betreiber eines Internetzugangs erzählen würden. Ist das nicht der Fall, kann man zumindest über https nachdenken. Am Ende entscheiden die User ob sie auch unverschlüsselt (falls sie wissen was das ist) kommunizieren möchten oder nicht. Da lohnt es sich ggf. Absprungraten in der Webanalyse zu beobachten…

  5. Danke für die Anleitung ich such schon seit Tagen nach einer sinnvollen Anleitung und immer war irgendwo etwas falsch. Super arbeit…

  6. Danke, hat funktioniert :)

  7. Danke für den Hinweis …
    Aber wie erreiche ich, dass nur www.domain.tld und domain-tld auf https umgeleitet werden, sub.domain.tld jedoch nicht?

  8. Auch, wenn der Artikel schon älter ist, bin ich auf den Artikel über google.de gestoßen und deine Infos zum Thema Weiterleitung von http:// auf https:// per .htaccess hat mir super geholfen. Danke.

  9. Vielen Dank für die Anleitung. Bei der normalen Eingabe haben wir immer eine Fehlermeldung erhalten. Mit der Weiterleitung ist dies nun zum Glück Geschichte.

  10. Und um auf www und https 301 weiterleitung vorzunehmen muss man dann

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

    verwenden?

  11. Vielen Dank eine sehr gute Anleitung hat mir sehr geholfen. Danke

  12. Guten Tag, vielen Dank erst einmal für den Artikel auf den ich über Google gestoßen bin. Habe in den letzten Wochen nämlich fest gestellt, dass ich seit der Umstellung auf SSL stetig im Indexierungsstatus der GWT ab falle. Nun musste ich mich doch noch mal etwas intensiver diesem Thema widmen und habe festgestellt, dass ich bei der (vermeintlichen?) Umstellung auf SSL keine vernünftige Redirection erstellt habe. Nun werde ich das mal mit deiner obigen Anleitung probieren.

    Aber noch einmal eine Frage zu SEO und den Google Suchergebnissen. Was wird damit passieren??? Werden meine Artikel alle aus Google verschwinden, bis diese erneut indexiert wurden? Könnte es mir aktuell nicht erlauben die guten Platzierungen zu zerstören!

    Viele Grüße!

    • Punkt 1: Mit der https-Seite in den GWT anmelden, da es sich hierbei ja um eine neue Adresse handelt. Schließlich könnte man unter https eine völlig andere Seite betreiben, als unter http.

      Punkt 2: Die 301er Redirects sind wichtig, sonst gehen die Rankings wirklich (erst einmal) verloren.

      Punkt 3: Warum hast du umgestellt?

  13. Danke für den Artikel, das war für mich als totalen Apache-Noob und Neuling sehr hilfreich!

  14. ich habe zwei domains:

    my.de hat kein Zertfikat
    myssl.de hat ein Zertifikat

    egal was der benutzer eingibt, er soll immer auf https://pages/target.html umgeleitet werden.

    Wenn der Benutzer auf https://my.de geht, dann bekommt er immer die „Sicherheitswarung“ des Browsers, auch dann wenn per .htaccess auf https://myssl.de/target.html umgeleitet wird.

    Was kann ich da machen?

  15. Sehr schön,
    wir hatten hier das Probelme das wir zum einem eine Weiterleitung wegen URL-Änderung (redirect) und zum anderen auf https. Der redirect-checker meldet 302 und 301. Unser Fehler lag an [L] anstelle von [R=301,L]
    Danke

  16. Funktioniert prima!
    vielen Dank!

  17. Wieder mal ein sehr hilfreicher Artikel, danke dir!

  18. Hallo,

    na das teste ich doch gleich danke !

    Gruß Silvio

  19. Vielleicht kannst Du mich in die richtige Richtung schubsen? Ich hab gestern unsere Domain www.umbra.de bei Hosteurope auf SSL umgestellt, soweit so gut. Hab dann die .htaccess mit folgendem Code hinterlegt:
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    Das funktioniert auch für www.umbra.de. Blöööööderweise hab ich aber noch Subdomains im Paket und andere Domains, die in andere Verzeichnisse zeigen. Die werden nun als unsicher angezeigt, weil ja mit dem Script ALLE Inhalte als https eingestuft werden, aber nur www.umbra.de ein Zertifikat hat.
    Gibt’s da auch ein Schnipsel, dass nur www.umbra.de per 301 auf https redirected wird?
    Hosteurope lässt mich im Regen stehn.
    Würd mir schon reichen zu erfahren, ob das überhaupt geht.
    Vielen Dank im Voraus.
    Peter

  20. Hallo,
    würde gerne meine htaccess Weiterleitungen optimieren. Meine Weiterleitungen:
    1. von nicht www nach www
    2. von http nach https
    3. von https://www.chweb.ch nach https://www.chweb.ch/de/

    Die 3. Weiterleitung kommt aus dem CMS (Contrexx) alle anderen aus der htacess

    Gibt es die Möglichkeit diese Weiterleitungen zu reduzieren und zum beispiel direkt von nicht www nach https://www.chweb.ch/de/ zu verlinken?

    Ich bedanke mich im Voraus für Eure Anregungen und Vorschläge. Thomas

  21. Super Anleitung, Danke! Hat mir unglaublich weiter geholfen! Beste Grüße. Jan

  22. Dieter Olsberg | 27. März 2017 um 16:16 | Antworten

    Guten Tag,
    kann ich auch mit .htaccess von www.subdomain.domain.de auf https://subdomain.domain.de umleiten oder weiterleiten?
    Ich möchte also, egal ob www vor der Subdomain steht oder nicht, immer auf https://subdomain.domain.de auskommen
    Das Wildcardcertificat ist für *.domain.de ausgestellt

  23. Aussgezeichneter Beitrag, der mir heute mal wieder nützlich war.

    Grüsse aus Thun, Schweiz
    Silvester

  24. Jubel!! Hat auf Anhieb geklappt. Vielen Dank!!!

  25. Super ANleitung – konnte ich heute gut gebrauchen. Hat prima funktioniert!!

  26. Vielen Dank für die verständlichen Informationen und die Kopiermöglichkeiten.
    Mit dieser Anleitung konnte ich meine dauerhafte Umleitung auf https ohne Probleme einrichten!
    So kann auch ein Hobby-Webmaster die anstehenden Aufgaben erledigen.

  27. Mein Server OS ist Debian Jessie.
    Dort ist phpmyadmin schon unter /etc/phpmyadmin vorkonfiguriert.
    Die dokument root ist unter /usr/share/phpmyadmin
    Ich möchte den Aufruf http://srv2.raith-net.org/phpmyadmin in
    https://srv2.raith-net./php2myadmin redirecten.
    in den Teil habe ich „AllowOverride all“ eingetragen und in dieser Directory die .htaccess Datei plaziert. Sie sieht so aus:

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

    Das Ergebnis ist:
    Es findet ein redirect statt, aber nur zu
    https://srv2.raith-net.org/
    Es erscheint die Apache2 Default Page, die sich unter /var/www/htdocs als
    index.html befindet. Das ist die Apache2 Default DocumentRoot.

    Das heißt, daß beim Umschreiben zu HTTPS /phpmyadmin fehlt.

    Gibt es da eine Lösung?

  28. Weiß jemand von euch, wie ich eine https-Seite auf eine andere https-Seite per .htaccess korrekt umleite? Ich nutze bei beiden Seiten WordPress und die Weiterleitungen funktionieren nicht alle! Konkret möchte ich https://www.euer-hochzeitsfotograf.eu/hochzeitsfotografie/kassel/ zu https://www.hochzeitsfotograf-colista.de/hochzeitsfotograf-kassel/ weiterleiten. Jedoch verweist die .htaccess auf die Seite https://www.hochzeitsfotograf-colista.de/hochzeitsfotografie/kassel/, die es nicht gibt! Hat jemand von euch eine Problemlösung dafür?

    Zur Zeit habe ich für alle Seiten und Verzeichnisse der alten Webseite ein Verzeichnis mit einer index.php erstellt die dann mit diesem Behehl umleitet:

    Das funktioniert mit der PHP-Weiterleitung zwar super, jedoch sind noch beide Domains im Google-Index, was ich gerne wegen Doublicate Content vermeiden möchte! Deswegen würde ich gerne eine korrekte .htaccess-Weiterleitung erstellen. Was meint ihr dazu?

    Vielen Dank schon mal für eure Hilfe!

  29. Okay jetzt hat es endlich geklappt.
    Der Code muss an der passenden Stelle in der .htaccess abgelegt werden:

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

    Bei mir sieht es jetzt wie folgt aus:
    # 6G:[QUERY STRINGS]

    RewriteEngine On
    RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
    RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
    RewriteCond %{QUERY_STRING} ([a-z0-9]{2000}) [NC,OR]
    RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
    RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
    RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
    RewriteCond %{QUERY_STRING} (|%3) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`||\|) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
    RewriteCond %{QUERY_STRING} (\’|\“)(.*)(drop|insert|md5|select|union) [NC]
    RewriteRule .* – [F]

    # 6G:[REQUEST METHOD]

    RewriteCond %{REQUEST_METHOD} ^(connect|debug|delete|move|put|trace|track) [NC]
    RewriteRule .* – [F]

    # 6G:[REFERRERS]

    RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000}) [NC,OR]
    RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
    RewriteRule .* – [F]

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

  30. Denis Schumacher | 18. Oktober 2017 um 15:09 | Antworten

    Hallo.

    Toller Beitrag. Aber Folgendes Problem:

    Die Weiterleitung auf https funktioniert einwandfrei wenn ich die Startseite im Browser eingebe. Auch wenn ich dann von der Startseite zu einer Unterseite wechsel, wird die Seite korrekt auf https weitergeleitet.

    Aber: Wenn ich nicht die Startseite, sondern eine Unterseite DIREKT in den Browser eingeben, dann leitet es nicht auf https weiter, sondern ruft die Seite unter http auf… (z.B. http://autovermietung-schumacher.de/impressum)

    Habe ich etwas falsch gemacht? Ich bin genau nach Anleitung vorgegangen.

    LG Denis

  31. Danke für diesen hilfreichen Artikel. Die Weiterleitung funktioniert bei mir auf diesem Wege auch , aber leider nur für http://www.meine-domain.de

    Ich muss aber dringend auch folgendes auf https umleiten:
    subdomain.meine-domain.de –> auf https://subdomain.meine-domain.de

    Wenn ich momentan in die Adresszeile eingebe: subdomain.meine-domain.de werde ich lediglich weitergeleitet auf https://meine-domain.de

    Was mache ich falsch?

    Hier meine htaccess:
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

  32. Hat sich erledigt. Zeile 3 der .htaccess musste ich ändern in:
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

    Das * hat’s gebracht.

  33. kurze Frage bin echt aufgeschmissen was das angeht und bin relativ neu in dem bereich . Also geht mit mir sanft um :D …….
    also habe eine Domain mit folgender Moz Metrik :
    DA:31 PA:01 mit http
    DA:31 PA:45 mit www

    Jetzt wollte ich eine Domain verlinken , welche metrik wird dann erfasst die http oder die www metrik .

    Bitte um tipps wie ich es hinkriege das zum beispiel die www metrik genommen wird .

    Danke fuers erste

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.


*