htaccess reindirizza non www a www con SSL / HTTPS


10

Voglio una regola di riscrittura che reindirizzi tutto su https:// AND www .

Ad esempio http://example.comdovrebbe andarehttps://www.example.com

Questo è quello che ho:

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

Risposte:


11

Ho trovato la soluzione

Senza HSTS (reindirizzamento singolo):

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]

Con HSTS (doppio reindirizzamento):

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
Si noti che ciò comporterà un doppio reindirizzamento durante la richiesta http://example.com(ad es. HTTP e non www), poiché reindirizzerà prima a HTTPS sullo stesso host (cioè senza www) e quindi reindirizzerà a wwwcome secondo reindirizzamento. Puoi correggerlo semplicemente invertendo queste due regole.
Mr White

@MrWhite @ in realtà vuoi un doppio reindirizzamento su un https://reindirizzamento corretto , specialmente se usi HSTS. In questo modo, le tue preferenze HSTS possono essere memorizzate dal browser per entrambi i tuoi domini e le richieste successive saranno sempre https://
impostate su

@xsrf È ancora "corretto" (e più efficiente) avere un unico reindirizzamento www e HTTPS. E 'solo bisogno di essere tenuto separato quando si implementa HSTS.
Mr White,

Entrambi i punti positivi di xsrf e MrWhite. Ho aggiornato la risposta.
Sarà il

@xsrf Ho controllato il doppio reindirizzamento con htaccess.madewithlove.be e sembra che reindirizzi solo http: //> https: // non www .
Sarà il

6

Le tue condizioni sono implicitamente AND e la tua seconda condizione sarà sempre vera (a meno che tu non abbia altri domini), quindi le tue regole attuali reindirizzeranno solo il traffico non SSL.

È necessario per ORle condizioni e negare la www(seconda) condizione:

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

Se SERVER_PORTnon è 443 (ovvero. Non è HTTPS) o l'host non inizia con www.(ovvero. Si sta accedendo al dominio nudo), reindirizzare all'URL canonico.

Tuttavia, se questo reindirizzerà https://example.comal https://www.example.comdipenderà dalla vostra certificato di sicurezza. (Per poter attivare il reindirizzamento .htaccess, il tuo sito deve essere accessibile sia su www che non www su SSL.)


1

Questo verrà utilizzato per www o non www. Se si tenta di aprire il collegamento con www, reindirizzare l'URL a https con www

Esempio: http://domain.comreindirizzamento ahttps://domain.com

oppure Se si tenta di aprire un collegamento con non-www, reindirizzare l'URL a https con non-www

Esempio: http://www.domain.comreindirizzamento ahttps://www.domain.com

RewriteEngine on

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

Questo non gestisce il reindirizzamento da non www a www come indicato nella domanda.
MrWhite,

Puoi aggiungere questa riga in htaccess RewriteCond% {HTTP_HOST}! ^ Www \. RewriteRule ^ (. *) $ % {HTTP_HOST} / $ 1 [R = 301, L]
Ajay Patidar

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

Puoi modificare la tua risposta.
MrWhite,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.