Ich habe den folgenden htaccess-Code:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Ich möchte, dass meine Site https://www.
mit HTTPS umgeleitet wird und die www.
Subdomain erzwungen wird. Wenn ich jedoch darauf zugreife http://www.
(ohne HTTPS), wird ich nicht https://www
mit HTTPS umgeleitet .
RewriteCond %{HTTPS} =off
Antworten:
Um zuerst HTTPS zu erzwingen, müssen Sie die richtige Umgebungsvariable überprüfen
%{HTTPS} off
, aber Ihre obige Regel stellt dann das vor.www.
Da Sie eine zweite Regel erzwingenwww.
müssen, verwenden Sie sie nicht in der ersten Regel.Über das Proxying
Bei einigen Proxy-Formen, bei denen der Client über HTTPS eine Verbindung zu einem Proxy, Load Balancer, einer Passagieranwendung usw. herstellt, kann die
%{HTTPS}
Variable niemalson
eine Umschreibschleife sein. Dies liegt daran, dass Ihre Anwendung tatsächlich einfachen HTTP-Verkehr empfängt, obwohl der Client und der Proxy / Load Balancer HTTPS verwenden. Überprüfen Sie in diesen Fällen denX-Forwarded-Proto
Header anstelle der%{HTTPS}
Variablen. Diese Antwort zeigt den entsprechenden Prozessquelle
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
eine URL wie exaple.com/?bla=%20 verwendete, wurde exaple.com/?bla=%2520 , dh das Prozentzeichen wurde codiert. Verwenden Sie das FlagNE
, um eine doppelte Codierung zu verhindern:RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
X-Forwarded-Proto
Header überprüfen, um HTTPS anstelle der%{HTTPS}
Variablen zu überprüfen . Sie haben nicht gesagt, welcher Teil die Schleife, denwww
oder den HTTPS-Teil verursacht, aber das ist das erste, was mir in den Sinn kommt.http://example.com
. B. HTTP und Nicht-WWW), erhalten Sie eine doppelte Umleitung. Zuerst zuhttps://example.com
(der ersten Regel) und dann zuhttps://www.example.com
(der zweiten Regel). Sie können dies beheben, indem Sie diese beiden Regeln einfach umkehren, da beide Regeln unabhängig davon zu HTTPS umleiten.Michals Antwort hat bei mir funktioniert, wenn auch mit einer kleinen Modifikation:
Problem:
Wenn Sie über ein Sicherheitszertifikat für eine einzelne Site verfügen , einen Browser, der versucht, ohne https: // www auf Ihre Seite zuzugreifen. (oder welche Domain auch immer Ihr Zertifikat abdeckt) zeigt einen hässlichen roten Warnbildschirm an, bevor es überhaupt die Weiterleitung zur sicheren und korrekten https-Seite erhält.
Lösung
Verwenden Sie zuerst die Umleitung zum WWW (oder zu der Domain, für die Ihr Zertifikat gilt) und führen Sie dann die https-Umleitung durch. Dadurch wird sichergestellt, dass Ihre Benutzer nicht mit Fehlern konfrontiert werden, da Ihr Browser ein Zertifikat sieht, das die aktuelle URL nicht abdeckt.
quelle
https://example.com
. Meiner Meinung nach ist dies jedoch das Format mit der geringsten Wahrscheinlichkeit, das von einem Benutzer eingegeben wird. (Die akzeptierte Antwort wird auch das gleiche Problem haben)https://
ohnewww
ein Zertifikatwww
auskommen müssen, fügenRewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
Sie einfach diese Regel zur Lösung hinzu: Sie geht einfach zurück,http
wenn Sie versuchen, eine Verbindung herzustellenhttps://example.com
, um Zertifikatfehler zu vermeiden.http://example.com
(dh HTTP und kein www)Wenn Sie CloudFlare oder ein ähnliches CDN verwenden, wird bei den hier bereitgestellten% {HTTPS} -Lösungen ein Endlosschleifenfehler angezeigt. Wenn Sie ein CloudFlare-Benutzer sind, müssen Sie Folgendes verwenden:
quelle
=http
habe!=https
für unsere Umgebungen geändert .X-Forwarded-Proto
Header wurde nicht deklariert, wenn http, so!=https
auch der Trick.{HTTPS}
es nicht funktioniert. Ich habe es versucht{ENV:HTTPS}
und sogar{SERVER_PORT} 443
, aber am Ende war es, weil ich nach den benutzerdefinierten HTTP-Anforderungsheadern von Cloudflare suchen musste.SCHLECHTE LÖSUNG UND WARUM!
Verwenden Sie niemals die unten stehende Lösung, denn wenn Sie ihren Code verwenden, ist das ungefähr so:
Der Browser geht zu:
Leitet dann weiter zu:
Leitet dann weiter zu:
Dies ist zu viel Anfrage an den Server.
Die meisten Antworten, die sogar akzeptiert wurden, haben dieses Problem.
BESTE LÖSUNG UND DIE ANTWORT
Dieser Code hat die
[OR]
Bedingung, doppelte Änderungen an der URL zu verhindern!quelle
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
wp-content/cache/page_enhanced/
und dann so weiter. Wie kann ich das beheben? Bearbeiten: Sieht so aus, als müsste ich es oben platzieren.htaccess
. Danke für das Drehbuch :)Dies ist der beste Weg, den ich für Proxy- und nicht für Proxy-Benutzer gefunden habe
quelle
Es gibt viele Lösungen. Hier ist ein Link zum Apache-Wiki, das sich direkt mit diesem Problem befasst.
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
quelle
RewriteCond %{HTTPS} off
inRewriteCond %{HTTPS} !=on
diese Umleitung immer passieren würde, dies scheint mir die bessere Antwort zu sein.Um http: // oder https: // zu https: // www umzuleiten , können Sie für alle Apache-Versionen die folgende Regel verwenden:
Apache 2.4
Beachten Sie, dass die Variable% {REQUEST_SCHEME} seit Apache 2.4 zur Verwendung verfügbar ist .
quelle
Wenn Sie sich in CloudFlare befinden, stellen Sie sicher, dass Sie Folgendes verwenden.
Dies erspart Ihnen die Umleitungsschleife und leitet Ihre Site sicher zu SSL um.
PS Es ist eine gute Idee, wenn Sie die mod_rewrite.c überprüfen!
quelle
quelle
Hinweise: Stellen Sie sicher, dass Sie die folgenden Schritte ausgeführt haben
Jetzt funktioniert Ihr .htaccess und Ihre Site wird zu http: // zu https: // www umgeleitet
quelle
Ähnlich wie bei Amir Forsatis Lösung htaccess-Umleitung zu https: // www, aber für einen variablen Domainnamen schlage ich vor:
quelle
Legen Sie in Ihrer .htaccess-Datei fest
quelle
Ich habe den folgenden Code von dieser Website verwendet. Er funktioniert hervorragend. Https://www.freecodecamp.org/news/how-to-redirect-http-to-https-using-htaccess/
Ich hoffe es hilft
quelle
Ich versuche die erste Antwort und es funktioniert nicht ... Diese Arbeit:
quelle