So leiten Sie alle HTTP-Anforderungen an HTTPS um

294

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?

Katze
quelle
1
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}
Reese Moore
quelle
24
@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.
Adam
338

In den Apache-Dokumenten wird davon abgeraten, ein Umschreiben durchzuführen:

httpGehen Sie wie httpsfolgt vor, um URLs an umzuleiten :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Dieses Snippet sollte in die Konfigurationsdatei des Hauptservers aufgenommen werden, nicht in .htaccessdie 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.

ssc
quelle
11
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]
David
quelle
7
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 . )

Bruno
quelle
1
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

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
GiorgosK
quelle
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 .
MrWhite
Wo lege ich diesen Text ab?
Aaron Franke
Auf die ähnliche Art von Frage. Kann jemand bei der folgenden Frage helfen? stackoverflow.com/questions/59503217/…
appsntech
14

Dies ist der HTML-Umleitungsansatz, der funktioniert, aber nicht der beste.

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

PHP-Ansatz

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect"); 
    } 
}
?>

.htaccess Ansatz

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

kopiert von: www.letuslook.org

Timothy Nwanwene
quelle
Wohin geht .htaccesses? Auch dieser Link ist tot.
Aaron Franke
8

Ich mag diese Methode der Umleitung von http zu https. Weil ich es nicht für jede Site bearbeiten muss.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Cory
quelle
Wo lege ich diesen Text ab?
Aaron Franke
6

Wenn Sie den folgenden Code in Ihrer .htaccess-Datei verwenden, werden Besucher automatisch zur HTTPS-Version Ihrer Website weitergeleitet:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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.

OpenWebWar
quelle
Was bedeuten L und R?
Aaron Franke
5

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]

https://www.godaddy.com/help/redirect-http-to-https-automatically-8828

AnarchieOutlaw
quelle
5

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 :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

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:

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

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 .

Wenn Sie nach einer PHP-Lösung suchen, sehen Sie sich das Array $ _SERVER und die Header-Funktion an :

if (!$_SERVER['HTTPS']) {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
} 
maikel
quelle
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:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

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:

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]
Sourabh
quelle
Was bedeuten L und R?
Aaron Franke
4

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>

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security

Waqas
quelle
2

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.

Apache 2.4.

<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>
starkeen
quelle
2

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.

F. Scott Gale
quelle
1

Durch .htaccess Dies wird helfen.

RewriteEngine On


RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Weitere Informationen finden Sie hier. Wie leite ich HTTP zu HTTP um?

Roshan Padole
quelle
1
Dies ist die Lösung für alle, die einen Fehler "Zu viele Weiterleitungen" erhalten und die Eigenschaft allowOverride nicht ändern können.
Evochrom
1

Sofern Sie mod_rewrite nicht für andere Zwecke benötigen, ist die Verwendung der Apache Core IF-Direktive sauberer und schneller:

<If "%{HTTPS} == 'off'">
Redirect permanent / https://yoursite.com/
</If>

Sie können der IF-Direktive weitere Bedingungen hinzufügen, z. B. eine einzelne kanonische Domäne ohne das Präfix www sicherstellen:

<If "req('Host') != 'myonetruesite.com' || %{HTTPS} == 'off'">
Redirect permanent / https://myonetruesite.com/
</If>

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

SashaK
quelle
1

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]

Ehsan Sattari
quelle
Hallo, danke für die Antwort. Was fügt Ihre Antwort hinzu, was andere vorhandene Antworten nicht haben?
Gricey
Auf die ähnliche Art von Frage. Kann jemand bei der folgenden Frage helfen? stackoverflow.com/questions/59503217/…
appsntech
0

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]
Oleg Apanovich
quelle
0
 Redirect 301 / https://example.com/

(hat bei mir funktioniert, als keine der oben genannten Antworten funktioniert hat)

Bonus:

ServerAlias www.example.com example.com

(behoben https: // www .example.com nicht gefunden)

aalesund
quelle
0

Dadurch werden alle URLs zu https und www umgeleitet

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC,OR]
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Husain Basrawala
quelle
0

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

step 1: 
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

und Festlegen der Connector-Einstellungen für [Tomcat_base] /conf/server.xml:

step 2:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443"/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="[keystorelocation]" type="RSA" />
</SSLHostConfig>
</Connector>

Hinweis: Wenn Sie bereits die https-Konfiguration vorgenommen und versucht haben, umzuleiten, führen Sie nur Schritt 1 aus.

Bhaskara Arani
quelle
-1

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 :-))

BertC
quelle
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.
März 82ch
-1

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:

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

Oder in Ihrer Root-.htaccess-Datei:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Bonus: Es wird nicht versucht, den http-Verkehr auf Ihrem lokalen Entwicklungscomputer umzuleiten.

ScottyB
quelle
-1

Für mich geht das:

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

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

Intacto
quelle