it-swarm.com.de

Nicht-WWW-Weiterleitung zu WWW und nicht-SSL zu SSL - htaccess

Ich versuche, meine Wordpress Site dauerhaft von Nicht-WWW nach WWW und von Nicht-SSL nach SSL umzuleiten.

Hier ist der Code, den ich benutze:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 

RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

Ich frage mich, ob der Code richtig ist oder besser gemacht werden kann. Ich meine, es scheint zu funktionieren, aber PageSpeed ​​sagt, dass ich so viele Weiterleitungen vermeiden sollte.

EDIT: Also sollte es so aussehen:

RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 

?

EDIT2:

RewriteEngine On

RewriteCond %{HTTP_Host} ^static.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]

RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 
3
kacper3355

Was Sie haben, ist vollkommen in Ordnung und müsste auf diese Weise implementiert werden (durch Umleiten zu HTTPS auf demselben Host), wenn Sie HSTS implementieren möchten.

Um jedoch eine doppelte Umleitung zu vermeiden, wenn Sie http://example.com anfordern, sollten Sie diese beiden Regeln umkehren. Andernfalls erhalten Sie die folgende doppelte Weiterleitung:

  • http://example.com bis https://example.com bishttps://www.example.com

Zum Beispiel:

RewriteEngine On

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

RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 

Die Anweisung RewriteEngine muss nicht wiederholt werden.

Es ist nicht erforderlich, einen Rückverweis (dh (.*)) zu erfassen, wenn er nicht in der Ersetzung verwendet wird. Die Anker ^ und $ sind nicht erforderlich, da Regex standardmäßig gierig ist.

Die andere "Stil" Inkonsistenz zwischen den obigen Regeln besteht darin, dass Sie eine erfasste Rückreferenz ($1) in der ersten RewriteRule und der Servervariablen REQUEST_URI in der zweiten verwenden. Es macht keinen Unterschied, wie es funktioniert, da es dasselbe auf zwei verschiedene Arten tut. Aber es sind zwei verschiedene "Stile" (als ob sie von zwei verschiedenen Leuten geschrieben wurden).


EDIT2:

Ich habe auch eine Subdomain - static.example.com (nicht www). Ich möchte hier SSL hinzufügen und WWW an Nicht-WWW umleiten (jetzt können Benutzer auch über www auf die Site zugreifen und erhalten URL wie www.static.example.com). Ich habe etwas in EDIT2 ausprobiert (ich habe gerade meinen Beitrag bearbeitet). Können Sie mir sagen, was mit diesem Code nicht stimmt?

RewriteCond %{HTTP_Host} ^static.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]

RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Ihre erste Regel hier ist die Umleitung von static.example.com zu static.example.com (dh keine Änderung) - dies führt natürlich zu einer nie endenden Umleitungsschleife (der Browser bricht schließlich mit einem Fehler ab).

Wenn Sie von www.static.example.com umleiten möchten, sollten Sie dies in der Anweisung RewriteCond überprüfen. Zum Beispiel:

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

Ich weiß nicht, ob Sie dies tun oder nicht, aber Sie müssen die HTTP-zu-HTTPS-Umleitung nicht wiederholen, sofern Sie die Anweisungen in der richtigen Reihenfolge ausführen.

Zusammenfassend also mit beiden Weiterleitungen zusammen:

RewriteEngine On

# Main domain non-www to www redirect
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

# Subdomain www to non-www redirect
RewriteCond %{HTTP_Host} ^www\.static\.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]

# HTTP to HTTPS redirect
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 
2
MrWhite