Best Practice: eine 301-Weiterleitung von HTTP auf HTTPS (Standard-Domain)
Habe ich die Suche nach dem perfekten 301-Weiterleitung. Aber ich finde so viele Lösungen und nicht wissen, was das beste ist.
Hier ist, was ich tun will
- http://domain.tld/ → https://domain.tld/
- http://www.domain.tld/ → https://domain.tld/
- https://www.domain.tld/ → https://domain.tld/
Best practice .htacess?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
</IfModule>
Dies ist meine bevorzugte code. Zumindest bis jetzt.
Alternative Möglichkeiten
Ich fand auch eine Menge anderer Möglichkeiten, zur Umleitung von HTTP
zu HTTPS
. Zum Beispiel:
1.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Fehlt ein Schritt? Und keine [R=301,L]
hier?
2.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Ist eine andere Reihenfolge in der Regel besser?
Sollte ich
RewriteRule ^(.*)$
statt
RewriteRule (.*)
?
3.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L,NE]
Nicht mit dem vollen domain-Namen irgendwelche performance-Vorteile? Brauche ich wirklich NE
? ([R=301,L,NE]
vs. [L,R=301]
)
So, meine Frage an alle Experten: Was ist das beste (durchführen) Weise die Umleitung sowohl aus HTTP
zu HTTPS
und von zu
HTTPS://
?
InformationsquelleAutor der Frage dash | 2015-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Starten Sie mit Ihrem Lieblings-Lösung:
In dem Teil, die Verarbeitung von nicht-https-URLs, die Sie umleiten zu
%{HTTP_HOST}
. Dann, falls Ihr host-name begann mit "www", eine zweite Umleitung stattfinden, senden Sie von https://www.domain.tld zu https://domain.tld die angeblich zu Ihrem endgültigen Ziel.Kürzen kann man dies durch die Verwendung
direkt in der ersten Regel. Die zweite Regel würde dann gelten nur für Kunden, die versuchen, Zugriff auf
https://www.domain.tld
.Alternative 1. funktioniert nicht aus dem gleichen Grund (fehlende den Fall, dass
HTTP_HOST
könntewww.domain.tld
) und zusätzlich wegen der fehlenden[L,R=301]
. Dies ist notwendig, da Sie nicht nur umschreiben einer URL hier, wie Sie das tun könnte in anderen Arten von rewrite-Regeln. Sie fordern die Kunden zum ändern des Typs der Anfrage - das ist der Grund, warum du ihm gerade sendest einen HTTP-code der301
.Bezüglich der match-Teil des
RewriteRule
selbst, sollten Sie konsequent sein: wenn Sie möchten, erfassen Sie Teile der URI verwenden Sie einen regulären Ausdruck mit Klammern. Sie sind in der Tat verwenden ihn als ganzes hier es ist in Ordnung, verwenden Sie einfach eine der alternativen für "alles", wie^
und verwenden%{REQUEST_URI}
später. Wenn Sie einige erfassen (d.h.(some_regex)
sollten Sie auf es in das Ziel mithilfe$1
(oder was auch immer Sie gehen, um Referenz) hier.In deine 3. alternative, wieder www + https fehlt.
Können Sie überprüfen, wenn https aus ist oder wenn der domain-name enthält ein führendes "www" in einer Regel, jedoch rewrite-Bedingungen implizit verbunden mit "und".
So sollte es Lesen:
NE ist notwendig für die Weitergabe an Dinge wie GET-Parameter und wie Sie sich auf die neue URI unverändert, siehe:
http://httpd.apache.org/docs/2.4/rewrite/flags.html
InformationsquelleAutor der Antwort nlu
So, Verdichtung, dies wird;
Lassen Sie mich wissen, wenn Sie irgendwelche bugs
InformationsquelleAutor der Antwort Roel