Ich habe die folgenden Regeln für meine .htaccess-Datei
%Vor%Wenn ich versuche, auf die Website zuzugreifen, wird daraus eine Redirect-Schleife. Wie man dieses Problem beheben und richtig umleiten?
Für den Fall, dass jemand eine Redirect-Schleife hat, wenn er Apache http- & gt; https hinter dem Load Balancer neu schreibt, hier ist eine Lösung, die für mich funktioniert hat.
Ich hatte das gleiche Problem, wenn ich RewriteCond% {HTTPS} aus für Apache hinter dem Load Balancer verwendete, wenn der Load Balancer SSL-Zeug macht.
Wenn die https-Version der Site nicht über Apache ModSSL konfiguriert wird, wird die% {HTTPS} -Variable nicht auf "on" gesetzt und die Weiterleitung wird unendlich fortgesetzt.
Die einfachste Lösung, um dies zu beheben, besteht darin, den gesamten https-Verkehr auf einen anderen Apache VirtualHost zu richten (wenn SSL vom Load Balancer verarbeitet wird), das die Kopie des Haupt-Ports ist, aber einen anderen Port hat (sagen wir 81). Und in .htaccess tun Sie mod_rewrite für alles, was nicht an Port 81 ist:
%Vor%Die zweite Möglichkeit besteht darin, den X-Forwarded-Proto-Header vom Load Balancer an Apache zu senden und ihn in der Umschreibungsbedingung zu verwenden:
%Vor%Ich habe viele Leute gesehen, die an Redirect-Schleifen leiden, wenn sie versuchen, mit .htaccess-Dateien von http zu https zu wechseln. Und es gibt viele verschiedene Antworten, wie man dieses Problem lösen kann. Manche Leute sagen:
%Vor%aber keiner von diesen funktionierte für mich. Ich entdeckte schließlich die zugrunde liegende Wahrheit, dass die verschiedenen Server da draußen auf unterschiedliche Weise konfiguriert sind und alle unterschiedliche Servervariablen bereitstellen.
Wenn keiner der oben genannten Punkte für Sie funktioniert, ist der Trick, PHP zu verwenden, um herauszufinden, welche env-Variablen Ihr bestimmter Server Ihnen sendet, wenn Sie auf eine http-Seite zugreifen und welche env-Variablen Sie senden, wenn Sie auf https zugreifen Seite, und dann können Sie diese Variable verwenden, um die Umleitung durchzuführen. Erstellen Sie einfach eine PHP-Datei (z. B. showphpvars.php) auf Ihrem Server mit diesem Code:
%Vor%und dann mit einem Browser anzeigen. Suchen Sie den Abschnitt der Variablen mit _SERVER ["HTTP_HOST" (etc)] und suchen Sie nach einem Pfad, der sich für http oder https ändert. Meiner stellte sich heraus, dass es sich um eine Variable namens SSL handelte, die bei Verwendung von https auf 1 gesetzt wurde und bei Verwendung von http überhaupt nicht eingestellt wurde.
Ich habe diese Variable verwendet, um auf https mit PHP umzuleiten, was so viel schöner ist als die Verwendung von htaccess, aber ich denke, dass jede der _SERVER-Variablen auch mit htaccess aufgerufen werden kann, wenn Sie daran interessiert sind, das weiter zu verwenden. Verwenden Sie einfach den Namen innerhalb der Anführungszeichen, ohne das Bit _SERVER [""], das PHP hinzufügt.
Wenn Sie eine Redirect-Schleife erhalten, egal was Sie in htaccess tun, führen Sie die Umleitung stattdessen in PHP durch.
Ich habe phpinfo () benutzt, wie @ z-m suggeriert, um die Variable zu finden, die sich ändert, wenn ich auf SSL bin. In meinem Fall war es $ _SERVER ['HTTP_X_PROTO'] == "https". Wenn diese Variable nicht SSL ist, wird sie nicht festgelegt.
Dies ist der Code, den ich für die Umleitung von HTTP zu HTTPS verwende:
%Vor%Zu Ihrer Information hängt es wirklich von Ihrem Hosting-Provider ab. Es kann einen Load Balancer verwenden, wie von Konstantin in einer anderen Antwort angegeben.
In meinem Fall ( Infomaniak ) hat nichts darüber hinaus funktioniert und ich habe eine unendliche Umleitungsschleife.
Der richtige Weg dazu ist erklärte tatsächlich auf ihrer Unterstützungsseite :
%Vor%Überprüfen Sie also immer Ihren Hosting-Provider. Hoffentlich haben sie einen Artikel, der erklärt, wie man das macht. Andernfalls fragen Sie einfach den Support.