Ich versuche, alle unsicheren HTTP-Anforderungen auf meiner Site (z. B. http://www.example.com) an HTTPS ( https://www.example.com) umzuleiten . Ich benutze übrigens PHP. Kann ich dies in .htaccess tun?
Sie können (und sollten) dies über Ihr httpd, nicht mit PHP tun .
drudge
2
@jnpcl, obwohl ich der Meinung bin, dass die httpd-Lösung besser ist als die PHP-basierte Lösung, halte ich eine systematische Umleitung im Allgemeinen nicht für eine gute Praxis. Wenn Sie Ihre Benutzer jederzeit zu HTTPS umleiten möchten, senden Sie sie vom "Einstiegspunkt" (dem ersten Link zu Ihrer Site) dorthin. Führen Sie dies nicht zur Hälfte durch, da dadurch möglicherweise Daten verloren gehen, die Sie denken ist geschützt (wenn Sie diese sofortige Umleitung nicht bemerken).
Bruno
@Bruno: Ich habe mehr über doppelte HTTP-Anfragen nachgedacht, über das Potenzial für verlorene Abfragezeichenfolgen und die Möglichkeit, dass der Benutzer manuell eingibthttp://
drudge
@jnpcl das ist in der Tat ein guter Punkt. Ich habe lediglich vorgeschlagen, dass die Leute zwar nach dieser Art von Weiterleitung fragen, um die Sicherheit ihrer Website zu verbessern, diese jedoch häufig nicht verbessern (da dies nicht verhindert, dass dieselbe Anforderung zuerst über einfaches HTTP erfolgt). .
Bruno
8
@outis: Der erste Link, den Sie gepostet haben, ist diese Frage.
Mei
Antworten:
305
Update: Obwohl diese Antwort vor einigen Jahren akzeptiert wurde, beachten Sie, dass der Ansatz jetzt in der Apache-Dokumentation empfohlen wird. Verwenden Sie Redirectstattdessen ein. Siehe diese Antwort .
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
@Cat, wie ich in meinen Antworten / Kommentaren sagte, wenn Sie versuchen, "alle unsicheren HTTP [...] zu HTTPS umzuleiten", werden diese Anforderungen durch diesen Ansatz nicht sicher, sondern nur vom Browser erstellt zweimal, einmal unsicher und einmal sicher.
Bruno
13
Was Sie wirklich tun sollten, ist die Verwendung von HSTS in Verbindung damit.
Reese Moore
3
Dies ist möglicherweise ein Fehler in meiner Apache-Version (2.4.6, wie in Centos 7 enthalten), aber dies hat Probleme mit bestimmten URLs. Beispielsweise werden http://server/foo?email=someone%40example.comWeiterleitungen zu https://server/foo?email=someone%2540example.comdem Zeichen "@" zweimal mit URL-Anführungszeichen versehen . Bei Verwendung der Methode in der Antwort von @ ssc tritt dieses Problem nicht auf.
Psmears
2
Falsche Antwort. Es wird nur die Basis-URL umgeleitet, keine URLs in Unterordnern. RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] ist die richtige Antwort
FredTheWebGuy
7
Sie empfehlen nicht unbedingt dagegen:In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Dies sollte die aktuelle Antwort sein. Aber was genau geht in der "SSL-Konfiguration"? Ein vollständiges Beispiel wäre wirklich hilfreich.
Ben
6
@ Ben: Das ist eine andere Frage, die online ausführlich dokumentiert ist. Übrigens habe ich gestern gerade ein fast vollständiges Beispiel hinzugefügt: serverfault.com/q/597012/26210, das Ihnen eine Vorstellung davon geben könnte, was in der SSL-Konfiguration vor sich geht
ssc
46
Dies ist ein großartiger Hinweis. Im Apache-Dokument wird jedoch auch Folgendes erwähnt: "Bei der Umleitung von http zu https ist die Verwendung von RewriteRule angemessen, wenn Sie keinen Zugriff auf die Konfigurationsdatei des Hauptservers haben und verpflichtet sind, diese Aufgabe in auszuführen stattdessen eine .htaccess-Datei. " Was für mich der Fall ist ...
peter_the_oak
4
@ user1844933 Wenn Sie das permanentSchlüsselwort verwenden, ist der Effekt der gleiche (der Browser erhält eine 301-Weiterleitung). ZB:Redirect permanent "/" "https://example.com"
BeetleJuice
2
@ Whitecat In Centos 6 befindet sich die Datei unter /etc/httpd/conf/httpd.conf
dstonek
141
Ich würde mit 301 Redirect empfehlen:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
danke, das funktioniert bei mir, die akzeptierte [L]
antwort
1
Ja. Dies ist die richtige Antwort, da auch alle URLs in Unterordnern weitergeleitet werden
FredTheWebGuy
Befindet sich dies auf der obersten Ebene der htaccess-Datei?
CodyBugstein
1
@CodyBugstein Dort platziere ich es immer und es funktioniert immer.
Daan van den Bergh
3
Allen Antworten fehlt eines: Jeder Code für die Umleitung muss VOR allem anderen direkt am Anfang Ihrer .htaccess-Datei platziert werden, wenn alle Seiten auf https umgeleitet werden sollen.
Vadim Anisimov
35
Wie ich in dieser Frage sagte , würde ich vorschlagen, dass Sie vermeiden, alle HTTP-Anforderungen blind auf ihre HTTPS-Entsprechung umzuleiten, da dies zu einem falschen Eindruck von Sicherheit führen kann. Stattdessen sollten Sie wahrscheinlich das "Stammverzeichnis" Ihrer HTTP-Site zum Stammverzeichnis Ihrer HTTPS-Site umleiten und von dort aus nur auf HTTPS verlinken.
Das Problem besteht darin, dass der Inhalt vor der Umleitung sichtbar wird, wenn der Client durch einen Link oder ein Formular auf der HTTPS-Site eine Anfrage an die HTTP-Site sendet.
Wenn beispielsweise eine Ihrer über HTTPS bereitgestellten Seiten ein Formular enthält, in dem <form action="http://example.com/doSomething">einige Daten angegeben und gesendet werden, die nicht eindeutig gesendet werden sollen, sendet der Browser zunächst die vollständige Anforderung (einschließlich der Entität, wenn es sich um einen POST handelt) an die HTTP-Site zuerst. Die Umleitung wird sofort an den Browser gesendet. Da eine große Anzahl von Benutzern die Warnungen deaktiviert oder ignoriert, wird sie wahrscheinlich ignoriert.
Natürlich kann der Fehler, die Links bereitzustellen, die zur HTTPS-Site führen sollen, aber letztendlich für die HTTP-Site gelten, Probleme verursachen, sobald Sie den HTTP-Port unter derselben IP-Adresse wie Ihre HTTPS-Site abhören. Ich denke jedoch, dass die Beibehaltung der beiden Websites als "Spiegel" nur die Wahrscheinlichkeit von Fehlern erhöht, da Sie möglicherweise davon ausgehen, dass sie sich automatisch korrigieren, indem sie den Benutzer zu HTTPS umleiten, obwohl es oft zu spät ist. (In dieser Frage gab es ähnliche Diskussionen . )
Bei der Entscheidung, eine gesamte Site als HTTPS bereitzustellen, ist diese Art der Umleitung sinnvoll. Ich möchte nicht, dass ein Benutzer eine 403 erhält, weil er http für seine Zielseite angegeben hat. Ich bin damit einverstanden, wenn jemand http in einem Link angibt und es für eine Produktion bereitstellt, die schlecht ist. Es sollte während des Tests gefangen werden, auch wenn die Umleitung vorhanden ist. Ich mag das "könnte" -Argument nicht, weil dieses "könnte" ohne die Umleitung geschehen könnte. Die Symptome sind die gleichen beim Testen in einem sicheren Browser, außer nachdem bestätigt wurde, dass die eindeutige Weiterleitung gesendet wird, anstatt eine 403 zu erhalten.
Derek Litz
Ja, ich sehe den Vorteil eines harten Scheiterns, wenn jemand versehentlich http in eine Formularaktion einfügt, aber in den meisten Fällen scheint es wichtiger zu sein, mit eingegebenen URLs nachsichtig umzugehen.
Daniel Lubarov
4
@ Daniel, ich stimme zu, dass es nützlich ist, nachsichtig zu sein, wenn Benutzer die URL eingeben. Ich würde sagen, es ist einer der Fälle, in denen es besser ist, diese Funktion während der Entwicklung / des Testens zu deaktivieren, sie jedoch in der Produktion (oder in den letzten Phasen der Entwicklung / des Testens) einzuschalten.
Bruno
Warum nicht http to https at dns.
Muhammad Umer
1
@ MuhammadUmer, weil das nichts mit DNS zu tun hat. Sie würden im Allgemeinen denselben Hostnamen verwenden, aber selbst bei einem anderen Hostnamen müssten Sie das Protokoll und den Port noch ändern.
Bruno
18
Ich fand heraus, dass der beste Weg für https und www auf Domain ist
Dies wird nicht umgeleitet, http://www.example.com/...da die beiden Bedingungen implizit UND-verknüpft sind. Sie sollten stattdessen ODER sein, dh. Fügen Sie das ORFlag in die erste Bedingung ein (und denken Sie daran, die wörtlichen Punkte im regulären Ausdruck zu umgehen). Aber wenn Sie implementieren HSTS dann wollen Sie nicht auf HTTPS und www in einer einzigen Umleitung umleiten, sollten Sie auf HTTPS umleiten zuerst .
Dies ist die richtige Methode zum Umleiten von HTTP zu HTTPS mithilfe von .htaccess gemäß GoDaddy.com. Die erste Codezeile ist selbsterklärend. In der zweiten Codezeile wird überprüft, ob HTTPS deaktiviert ist. In diesem Fall wird HTTP durch Ausführen der dritten Codezeile an HTTPS umgeleitet. Andernfalls wird die dritte Codezeile ignoriert.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Die beste Lösung hängt von Ihren Anforderungen ab. Dies ist eine Zusammenfassung der zuvor veröffentlichten Antworten, wobei ein Kontext hinzugefügt wurde.
Wenn Sie mit dem Apache-Webserver arbeiten und dessen Konfiguration ändern können, befolgen Sie die Apache-Dokumentation :
Sie haben aber auch gefragt, ob Sie dies in einer .htaccessDatei tun können . In diesem Fall können Sie Apaches RewriteEngine verwenden :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Wenn alles einwandfrei funktioniert und die Browser sich an diese Weiterleitung erinnern sollen, können Sie sie als dauerhaft deklarieren, indem Sie die letzte Zeile in Folgendes ändern:
Aber seien Sie vorsichtig, wenn Sie Ihre Meinung zu dieser Weiterleitung ändern können. Browser erinnern sich sehr lange daran und werden nicht prüfen, ob es sich geändert hat.
RewriteEngine OnAbhängig von der Webserverkonfiguration benötigen Sie möglicherweise nicht die erste Zeile .
Es scheint, dass die Apache-Dokumentation von der Rewrite-Route abrät. Was ist mit Redirect? Was kann eine .htaccessDatei sonst noch enthalten?
Aaron Franke
Ja, Redirect wird bevorzugt und kann in .htaccess verwendet werden. Sie können die Bedingung jedoch nicht hinzufügen, um nur den http-Verkehr zu https umzuleiten. Es leitet auch https um -> Endlosumleitungsschleife. Ich habe es in der VirtualHost-Direktive aufgeführt, die oben für http (Port 80) verwendet wurde. .Htaccess unterstützt diese Direktive nicht und daher kann Redirect hier nicht verwendet werden.
Maikel
4
Fügen Sie der .htaccess-Datei den folgenden Code hinzu:
Tun Sie alles, was oben für die Umleitung erklärt wurde. Fügen Sie einfach "HTTP Strict Transport Security" zu Ihrem Header hinzu. Dies vermeidet Menschen im mittleren Angriff.
Bearbeiten Sie beispielsweise Ihre Apache-Konfigurationsdatei (/etc/apache2/sites-enabled/website.conf und /etc/apache2/httpd.conf) und fügen Sie Ihrem VirtualHost Folgendes hinzu:
# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
Um alle httpAnfragen an umzuleiten https, können Sie Folgendes verwenden:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
Wenn mod-rewrite nicht aktiviert ist und Sie Apache 2.4 verwenden, können Sie auch eine RedirectInside- ifDirektive verwenden, um httpAnforderungen an umzuleiten https.
Wenn Sie sich in einer Situation befinden, in der Sie nicht direkt auf die Apache-Konfiguration für Ihre Site zugreifen können, für die viele gehostete Plattformen immer noch auf diese Weise eingeschränkt sind, würde ich einen zweistufigen Ansatz empfehlen. Der Grund, warum Apache selbst dokumentiert, dass Sie ihre Konfigurationsoptionen in erster Linie über mod_rewrite für HTTP zu HTTPS verwenden sollten.
Zunächst würden Sie, wie oben erwähnt, Ihre .htaccess mod_rewrite-Regel (n) einrichten:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
In Ihren PHP-Dateien (Sie müssen dies tun, wo immer dies für Ihre Situation angemessen ist) leiten einige Websites alle Anforderungen über eine einzige PHP-Datei, andere bedienen je nach Bedarf und Anforderung verschiedene Seiten ):
<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>
Das oben Gesagte muss VOR jedem Code ausgeführt werden, der möglicherweise sichere Daten in einer ungesicherten Umgebung verfügbar macht. Daher verwendet Ihre Site die automatische Umleitung über HTACCESS und mod_rewrite, während Ihre Skripte sicherstellen, dass keine Ausgabe bereitgestellt wird, wenn nicht über HTTPS zugegriffen wird.
Ich denke, die meisten Leute denken nicht so, und daher empfiehlt Apache, diese Methode nach Möglichkeit nicht zu verwenden. Es ist jedoch nur eine zusätzliche Überprüfung am Ende der Entwicklung erforderlich, um sicherzustellen, dass die Daten Ihres Benutzers sicher sind. Hoffentlich hilft dies jemand anderem, der aufgrund von Einschränkungen bei unseren Hosting-Diensten möglicherweise nicht empfohlene Methoden anwenden muss.
Um es in Aktion zu sehen (versuchen Sie es ohne www. Oder https: // oder mit .net anstelle von .com): https://nohodental.com/ (eine Site, an der ich arbeite).
Ich habe eine Methode gefunden, mit der alle Seiten meiner Website von http auf analog zu Seiten auf https umgeleitet werden können, die für mich funktionieren.
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Wenn Sie dies vom Tomcat-Server aus tun möchten, führen Sie die folgenden Schritte aus
Wie kann ein eigenständiger Apache Tomcat (8.5.x) HTTP-Server so konfiguriert werden, dass ein Benutzer, der www.domain.com eingibt, automatisch an die https-Site (www.domain.com) weitergeleitet wird?
Die 2-Schritt-Methode zum Einfügen der folgenden Elemente in Ihre [Tomcat_base] /conf/web.xml vor dem schließenden Tag
Ein anderer Vorteil dieses Problems ist, wenn ein Load Balancer ins Spiel kommt.
Die Situation ist wie folgt: - Der Datenverkehr vom Browser zum Load Balancer und zurück ist (sollte) HTTPS. - Der Datenverkehr zwischen dem Load Balancer und dem tatsächlichen WebServer ist HTTP.
Alle Serveranforderungsvariablen in PHP oder Apache zeigen also, dass die Verbindung nur HTTP ist. Die Verzeichnisse HTTP und HTTPS auf dem Server sind identisch.
Die RewriteCondition in der genehmigten Antwort funktioniert nicht. Es gibt entweder eine Schleife oder es funktioniert einfach nicht.
Die Frage ist: Wie funktioniert das auf einem Load Balancer?
(Oder ist der Load Balancer falsch konfiguriert? Was ich mir erhoffe, weil ich das Problem dann auf die WebHosting-Firma übertragen kann :-))
Die Umleitung müsste stattdessen nur auf dem Load Balancer erfolgen. Abhängig vom Typ des Load Balancers sollte dies in der Konfiguration möglich sein, oder es handelt sich um eine Apache-Instanz selbst, in der die akzeptierte Antwort funktionieren würde. Tun Sie es einfach nicht auf den einzelnen Knoten.
und zum Beispiel http: // server / foo? email = jemand% 40example.com leitet normal ohne Probleme weiter. Die Datei .htaccess im Stammverzeichnis der Website (z. B. public_html). Es ist möglich,
RewriteCond% {SERVER_PORT}! ^ 443 $ anstelle von RewriteCond% {HTTPS}! On zu verwenden
httpd
, nicht mit PHP tun .http://
Antworten:
Update: Obwohl diese Antwort vor einigen Jahren akzeptiert wurde, beachten Sie, dass der Ansatz jetzt in der Apache-Dokumentation empfohlen wird. Verwenden Sie
Redirect
stattdessen ein. Siehe diese Antwort .quelle
http://server/foo?email=someone%40example.com
Weiterleitungen zuhttps://server/foo?email=someone%2540example.com
dem Zeichen "@" zweimal mit URL-Anführungszeichen versehen . Bei Verwendung der Methode in der Antwort von @ ssc tritt dieses Problem nicht auf.In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
In den Apache-Dokumenten wird davon abgeraten, ein Umschreiben durchzuführen:
Dieses Snippet sollte in die Konfigurationsdatei des Hauptservers aufgenommen werden, nicht in
.htaccess
die in der Frage gestellte.Dieser Artikel ist möglicherweise erst erschienen, nachdem die Frage gestellt und beantwortet wurde, scheint aber der aktuelle Weg zu sein.
quelle
permanent
Schlüsselwort verwenden, ist der Effekt der gleiche (der Browser erhält eine 301-Weiterleitung). ZB:Redirect permanent "/" "https://example.com"
Ich würde mit 301 Redirect empfehlen:
quelle
[L]
Wie ich in dieser Frage sagte , würde ich vorschlagen, dass Sie vermeiden, alle HTTP-Anforderungen blind auf ihre HTTPS-Entsprechung umzuleiten, da dies zu einem falschen Eindruck von Sicherheit führen kann. Stattdessen sollten Sie wahrscheinlich das "Stammverzeichnis" Ihrer HTTP-Site zum Stammverzeichnis Ihrer HTTPS-Site umleiten und von dort aus nur auf HTTPS verlinken.
Das Problem besteht darin, dass der Inhalt vor der Umleitung sichtbar wird, wenn der Client durch einen Link oder ein Formular auf der HTTPS-Site eine Anfrage an die HTTP-Site sendet.
Wenn beispielsweise eine Ihrer über HTTPS bereitgestellten Seiten ein Formular enthält, in dem
<form action="http://example.com/doSomething">
einige Daten angegeben und gesendet werden, die nicht eindeutig gesendet werden sollen, sendet der Browser zunächst die vollständige Anforderung (einschließlich der Entität, wenn es sich um einen POST handelt) an die HTTP-Site zuerst. Die Umleitung wird sofort an den Browser gesendet. Da eine große Anzahl von Benutzern die Warnungen deaktiviert oder ignoriert, wird sie wahrscheinlich ignoriert.Natürlich kann der Fehler, die Links bereitzustellen, die zur HTTPS-Site führen sollen, aber letztendlich für die HTTP-Site gelten, Probleme verursachen, sobald Sie den HTTP-Port unter derselben IP-Adresse wie Ihre HTTPS-Site abhören. Ich denke jedoch, dass die Beibehaltung der beiden Websites als "Spiegel" nur die Wahrscheinlichkeit von Fehlern erhöht, da Sie möglicherweise davon ausgehen, dass sie sich automatisch korrigieren, indem sie den Benutzer zu HTTPS umleiten, obwohl es oft zu spät ist. (In dieser Frage gab es ähnliche Diskussionen . )
quelle
Ich fand heraus, dass der beste Weg für https und www auf Domain ist
quelle
http://www.example.com/...
da die beiden Bedingungen implizit UND-verknüpft sind. Sie sollten stattdessen ODER sein, dh. Fügen Sie dasOR
Flag in die erste Bedingung ein (und denken Sie daran, die wörtlichen Punkte im regulären Ausdruck zu umgehen). Aber wenn Sie implementieren HSTS dann wollen Sie nicht auf HTTPS und www in einer einzigen Umleitung umleiten, sollten Sie auf HTTPS umleiten zuerst .Dies ist der HTML-Umleitungsansatz, der funktioniert, aber nicht der beste.
PHP-Ansatz
.htaccess Ansatz
kopiert von: www.letuslook.org
quelle
.htaccess
es? Auch dieser Link ist tot.Ich mag diese Methode der Umleitung von http zu https. Weil ich es nicht für jede Site bearbeiten muss.
quelle
Wenn Sie den folgenden Code in Ihrer .htaccess-Datei verwenden, werden Besucher automatisch zur HTTPS-Version Ihrer Website weitergeleitet:
Wenn Sie eine vorhandene .htaccess-Datei haben:
Duplizieren Sie RewriteEngine On nicht.
Stellen Sie sicher, dass die Zeilen, die mit RewriteCond und RewriteRule beginnen, unmittelbar auf die bereits vorhandene RewriteEngine On folgen.
quelle
Dies ist die richtige Methode zum Umleiten von HTTP zu HTTPS mithilfe von .htaccess gemäß GoDaddy.com. Die erste Codezeile ist selbsterklärend. In der zweiten Codezeile wird überprüft, ob HTTPS deaktiviert ist. In diesem Fall wird HTTP durch Ausführen der dritten Codezeile an HTTPS umgeleitet. Andernfalls wird die dritte Codezeile ignoriert.
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
quelle
Die beste Lösung hängt von Ihren Anforderungen ab. Dies ist eine Zusammenfassung der zuvor veröffentlichten Antworten, wobei ein Kontext hinzugefügt wurde.
Wenn Sie mit dem Apache-Webserver arbeiten und dessen Konfiguration ändern können, befolgen Sie die Apache-Dokumentation :
Sie haben aber auch gefragt, ob Sie dies in einer
.htaccess
Datei tun können . In diesem Fall können Sie Apaches RewriteEngine verwenden :Wenn alles einwandfrei funktioniert und die Browser sich an diese Weiterleitung erinnern sollen, können Sie sie als dauerhaft deklarieren, indem Sie die letzte Zeile in Folgendes ändern:
Aber seien Sie vorsichtig, wenn Sie Ihre Meinung zu dieser Weiterleitung ändern können. Browser erinnern sich sehr lange daran und werden nicht prüfen, ob es sich geändert hat.
RewriteEngine On
Abhängig von der Webserverkonfiguration benötigen Sie möglicherweise nicht die erste Zeile .Wenn Sie nach einer PHP-Lösung suchen, sehen Sie sich das Array $ _SERVER und die Header-Funktion an :
quelle
.htaccess
Datei sonst noch enthalten?Fügen Sie der .htaccess-Datei den folgenden Code hinzu:
Wobei [Ihr Domainname] der Domainname Ihrer Website ist.
Sie können auch bestimmte Ordner von Ihrem Domain-Namen umleiten, indem Sie die letzte Zeile des obigen Codes durch Folgendes ersetzen:
quelle
Tun Sie alles, was oben für die Umleitung erklärt wurde. Fügen Sie einfach "HTTP Strict Transport Security" zu Ihrem Header hinzu. Dies vermeidet Menschen im mittleren Angriff.
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
quelle
Um alle
http
Anfragen an umzuleitenhttps
, können Sie Folgendes verwenden:Wenn mod-rewrite nicht aktiviert ist und Sie Apache 2.4 verwenden, können Sie auch eine
Redirect
Inside-if
Direktive verwenden, umhttp
Anforderungen an umzuleitenhttps
.Apache 2.4.
quelle
Wenn Sie sich in einer Situation befinden, in der Sie nicht direkt auf die Apache-Konfiguration für Ihre Site zugreifen können, für die viele gehostete Plattformen immer noch auf diese Weise eingeschränkt sind, würde ich einen zweistufigen Ansatz empfehlen. Der Grund, warum Apache selbst dokumentiert, dass Sie ihre Konfigurationsoptionen in erster Linie über mod_rewrite für HTTP zu HTTPS verwenden sollten.
Zunächst würden Sie, wie oben erwähnt, Ihre .htaccess mod_rewrite-Regel (n) einrichten:
In Ihren PHP-Dateien (Sie müssen dies tun, wo immer dies für Ihre Situation angemessen ist) leiten einige Websites alle Anforderungen über eine einzige PHP-Datei, andere bedienen je nach Bedarf und Anforderung verschiedene Seiten ):
Das oben Gesagte muss VOR jedem Code ausgeführt werden, der möglicherweise sichere Daten in einer ungesicherten Umgebung verfügbar macht. Daher verwendet Ihre Site die automatische Umleitung über HTACCESS und mod_rewrite, während Ihre Skripte sicherstellen, dass keine Ausgabe bereitgestellt wird, wenn nicht über HTTPS zugegriffen wird.
Ich denke, die meisten Leute denken nicht so, und daher empfiehlt Apache, diese Methode nach Möglichkeit nicht zu verwenden. Es ist jedoch nur eine zusätzliche Überprüfung am Ende der Entwicklung erforderlich, um sicherzustellen, dass die Daten Ihres Benutzers sicher sind. Hoffentlich hilft dies jemand anderem, der aufgrund von Einschränkungen bei unseren Hosting-Diensten möglicherweise nicht empfohlene Methoden anwenden muss.
quelle
Durch .htaccess Dies wird helfen.
Weitere Informationen finden Sie hier. Wie leite ich HTTP zu HTTP um?
quelle
Sofern Sie mod_rewrite nicht für andere Zwecke benötigen, ist die Verwendung der Apache Core IF-Direktive sauberer und schneller:
Sie können der IF-Direktive weitere Bedingungen hinzufügen, z. B. eine einzelne kanonische Domäne ohne das Präfix www sicherstellen:
Die Verwendung von mod_rewrite für alles ist sehr vertraut, aber sehen Sie, ob dies für Sie funktioniert.
Weitere Informationen: https://httpd.apache.org/docs/2.4/mod/core.html#if
Um es in Aktion zu sehen (versuchen Sie es ohne www. Oder https: // oder mit .net anstelle von .com): https://nohodental.com/ (eine Site, an der ich arbeite).
quelle
Nehmen Sie diesen Code zu Ihrer .htaccess-Datei. Leiten Sie HTTP automatisch zu HTTPS um
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
quelle
Ich habe eine Methode gefunden, mit der alle Seiten meiner Website von http auf analog zu Seiten auf https umgeleitet werden können, die für mich funktionieren.
quelle
(hat bei mir funktioniert, als keine der oben genannten Antworten funktioniert hat)
Bonus:
(behoben https: // www .example.com nicht gefunden)
quelle
Dadurch werden alle URLs zu https und www umgeleitet
quelle
Wenn Sie dies vom Tomcat-Server aus tun möchten, führen Sie die folgenden Schritte aus
Wie kann ein eigenständiger Apache Tomcat (8.5.x) HTTP-Server so konfiguriert werden, dass ein Benutzer, der www.domain.com eingibt, automatisch an die https-Site (www.domain.com) weitergeleitet wird?
Die 2-Schritt-Methode zum Einfügen der folgenden Elemente in Ihre [Tomcat_base] /conf/web.xml vor dem schließenden Tag
und Festlegen der Connector-Einstellungen für [Tomcat_base] /conf/server.xml:
Hinweis: Wenn Sie bereits die https-Konfiguration vorgenommen und versucht haben, umzuleiten, führen Sie nur Schritt 1 aus.
quelle
Wenn Sie Apache verwenden, ist mod_rewrite die einfachste Lösung und verfügt über zahlreiche Online-Dokumentationen. Zum Beispiel: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
quelle
Ein anderer Vorteil dieses Problems ist, wenn ein Load Balancer ins Spiel kommt.
Die Situation ist wie folgt: - Der Datenverkehr vom Browser zum Load Balancer und zurück ist (sollte) HTTPS. - Der Datenverkehr zwischen dem Load Balancer und dem tatsächlichen WebServer ist HTTP.
Alle Serveranforderungsvariablen in PHP oder Apache zeigen also, dass die Verbindung nur HTTP ist. Die Verzeichnisse HTTP und HTTPS auf dem Server sind identisch.
Die RewriteCondition in der genehmigten Antwort funktioniert nicht. Es gibt entweder eine Schleife oder es funktioniert einfach nicht.
Die Frage ist: Wie funktioniert das auf einem Load Balancer?
(Oder ist der Load Balancer falsch konfiguriert? Was ich mir erhoffe, weil ich das Problem dann auf die WebHosting-Firma übertragen kann :-))
quelle
Wenn Sie einen Amazon Web Services Elastic Load Balancer verwenden, der https-Verkehr akzeptiert und ihn mit http an Ihre Server weiterleitet, wird hier die richtige Methode zum Umleiten des gesamten http-Verkehrs zu https beschrieben: https://aws.amazon. com / premiumsupport / Knowledge-Center / Redirect-http-https-elb
Verwenden Sie den X-Forwarded-Proto-Header (enthält http oder https), der immer in http-Anforderungen vom Load Balancer enthalten ist, wie hier beschrieben: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x- forwarded-headers.html
In der Datei httpd.conf:
Oder in Ihrer Root-.htaccess-Datei:
Bonus: Es wird nicht versucht, den http-Verkehr auf Ihrem lokalen Entwicklungscomputer umzuleiten.
quelle
Für mich geht das:
und zum Beispiel http: // server / foo? email = jemand% 40example.com leitet normal ohne Probleme weiter. Die Datei .htaccess im Stammverzeichnis der Website (z. B. public_html). Es ist möglich, RewriteCond% {SERVER_PORT}! ^ 443 $ anstelle von RewriteCond% {HTTPS}! On zu verwenden
quelle