it-swarm.com.de

Best Practice: 301 HTTP zu HTTPS umleiten (Standarddomäne)

Ich habe nach der perfekten 301-Weiterleitung gesucht. Aber ich finde so viele Lösungen und weiß nicht, was das Beste ist.

Hier ist was ich machen möchte

Bewährte Vorgehensweise .hacess?

<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 mein bevorzugter Code. Zumindest jetzt.

Alternative Wege

Ich habe auch viele andere Möglichkeiten gefunden, von HTTP nach HTTPS umzuleiten. Beispielsweise:

1.

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

Vermissen Sie einen Schritt? Und nein [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 generell besser ?

Sollte ich es benutzen

RewriteRule ^(.*)$

anstatt

RewriteRule (.*)

?

3.

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L,NE]

Hat die Verwendung des vollständigen Domainnamens Leistungsvorteile? Brauche ich wirklich NE? ([R=301,L,NE] Vs. [L,R=301])

Meine Frage an alle Experten: Wie kann ich am besten von HTTP nach HTTPS und von nach HTTPS:// Umleiten?

23
dash

Um mit Ihrer Lieblingslösung zu beginnen:

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

In dem Teil, der Nicht-https-URLs behandelt, werden Sie zu %{HTTP_Host} Umgeleitet. Wenn Ihr Hostname mit "www" beginnt, muss eine zweite Weiterleitung erfolgen, um Sie von https: //www.domain.tld zu https://domain.tld welches Ihr endgültiges Ziel sein soll.

Sie können dies verkürzen, indem Sie verwenden

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

direkt in der ersten Regel. Die zweite Regel würde dann nur für Clients gelten, die versuchen, auf https://www.domain.tld Zuzugreifen.

Alternative 1. funktioniert nicht aus dem gleichen Grund (es fehlt der Fall, dass HTTP_Hostwww.domain.tld Sein könnte) und zusätzlich wegen des fehlenden [L,R=301]. Dies ist erforderlich, da Sie hier nicht nur eine URL umschreiben, wie dies bei anderen Arten von Umschreiberegeln der Fall ist. Sie fordern den Client auf, den Typ seiner Anforderung zu ändern. Aus diesem Grund senden Sie ihm den HTTP-Code 301.

Bezüglich des Match-Teils von RewriteRule selbst sollten Sie konsistent sein: Wenn Sie Teile des URI erfassen möchten, verwenden Sie einen regulären Ausdruck mit Klammern. Da Sie es tatsächlich als Ganzes verwenden, ist es in Ordnung, nur eine der Alternativen für "alles" zu verwenden, wie ^ Und später %{REQUEST_URI}. Wenn Sie eine Erfassung verwenden (dh (some_regex), Sollten Sie im Ziel darauf verweisen, indem Sie $1 (Oder was auch immer Sie verwenden) werden hier referenzieren).

In Ihrer dritten Alternative fehlt wieder www + https.

Sie können überprüfen, ob https deaktiviert ist oder , ob der Domainname in einer Regel ein führendes "www" enthält. Umschreibebedingungen sind jedoch implizit mit "und" verbunden. .

Also sollte es lauten:

RewriteCond %{HTTPS} off          [OR]
RewriteCond %{HTTP_Host} ^www\.   [NC]
RewriteRule ^ https://domain.tld%{REQUEST_URI} [R=301,L,NE]

Der NE wird benötigt, um Dinge wie GET-Parameter und ähnliches unverändert an den neuen URI weiterzuleiten, siehe:

http://httpd.Apache.org/docs/2.4/rewrite/flags.html

27
nlu

Verdichtet sich das also, wird dies;

RewriteEngine On 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC] 
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L,NE] 

Lassen Sie mich wissen, wenn Sie Fehler sehen

4
    RewriteEngine On   
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_Host} !^www\.
    RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Nichts zu ändern, nur kopieren und einfügen.

1
Homesh Paul