htaccess leitet nicht-www zu www mit SSL / HTTPS um


10

Ich möchte eine Umschreiberegel, die alles zu https:// AND umleitet www.

Zum Beispiel http://example.comsollte gehenhttps://www.example.com

Das habe ich:

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

Antworten:


11

Ich habe die Lösung gefunden.

Ohne HSTS (Single Redirect):

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]

Mit HSTS (Double Redirect):

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]

1
Beachten Sie, dass dies bei der Anforderung zu einer doppelten Umleitung führt http://example.com(dh HTTP und Nicht-WWW), da zuerst auf demselben Host (dh ohne www) zu HTTPS umgeleitet und dann wwwals zweite Umleitung umgeleitet wird. Sie können dies korrigieren, indem Sie diese beiden Regeln einfach umkehren.
MrWhite

@MrWhite @Wollen Sie tatsächlich eine doppelte Umleitung für eine ordnungsgemäße https://Umleitung wünschen , insbesondere wenn Sie HSTS verwenden. Auf diese Weise kann Ihre HSTS-Präferenz vom Browser sowohl für Ihre Domains gespeichert werden, und nachfolgende Anforderungen werden immer standardmäßighttps://
xsrf

@xsrf Es ist immer noch "richtig" (und effizienter), eine einzige WWW- und HTTPS-Umleitung zu haben. Es nur muss getrennt gehalten werden , wenn Sie HSTS implementieren.
MrWhite

Beide guten Punkte von xsrf und MrWhite. Ich habe die Antwort aktualisiert.
Will

@xsrf Ich habe die doppelte Weiterleitung mit htaccess.madewithlove.be überprüft und es scheint, dass sie nur http: //> https: // nicht www umleitet .
Will

6

Ihre Bedingungen sind implizit UND-verknüpft und Ihre zweite Bedingung ist immer erfüllt (es sei denn, Sie haben andere Domänen), sodass Ihre aktuellen Regeln nur Nicht-SSL-Verkehr umleiten.

Sie müssen ORdie Bedingungen erfüllen und die www(zweite) Bedingung negieren :

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

Wenn das SERVER_PORTnicht 443 ist (dh nicht HTTPS ist) oder der Host nicht mit beginnt www.(dh Sie greifen auf die nackte Domain zu), leiten Sie zur kanonischen URL weiter.

Ob dies jedoch umleiten https://example.comzu https://www.example.comauf Sicherheitszertifikat abhängen. (Auf Ihre Site muss sowohl über www als auch über www über SSL zugegriffen werden können, damit die .htaccess-Umleitung ausgelöst wird.)


1

Dies gilt sowohl für www als auch für nicht www. Wenn Sie versuchen, einen Link mit www zu öffnen, leiten Sie die URL mit www an https weiter

Beispiel: http://domain.comWeiterleiten anhttps://domain.com

oder Wenn Sie versuchen, einen Link mit Nicht-WWW zu öffnen, leiten Sie die URL mit Nicht-WWW zu https um

Beispiel: http://www.domain.comWeiterleiten anhttps://www.domain.com

RewriteEngine on

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Dies behandelt nicht die in der Frage angegebene Umleitung von Nicht-WWW zu WWW.
MrWhite

Sie können diese Zeile in htaccess RewriteCond% {HTTP_HOST}! ^ Www \ hinzufügen. RewriteRule ^ (. *) $ % {HTTP_HOST} / $ 1 [R = 301, L]
Ajay Patidar

Ersetzen RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] durchRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]
Ajay Patidar

Sie können Ihre Antwort bearbeiten .
MrWhite
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.