Forzare SSL e www in .htaccess


12

Sto cercando un modo per forzare SSL e www.

Sono stato in grado di forzare entrambi separatamente ma insieme continuo a incorrere in problemi di reindirizzamento. Il seguente codice funziona quando si gestisce un URL in questo formato: http://example.come reindirizza correttamente https://www.example.comma quando l'URL in arrivo https://example.comnon verrà inoltrato a https://www.example.com- Qualche suggerimento?

EDIT: dovrebbe anche inviare http://www.example.coma https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Risposte:


7

La prima riga viene utilizzata per impedire la riscrittura degli URL interni. Ciò potrebbe causare la visualizzazione di pagine diverse, quindi l'ho rimosso.

Se l'host è example.comrichiesto o meno su HTTPS, verrà riscritto https://example.com/. Vale a dire, si riscrive http://example.com, http://www.example.come https://example.comper https://www.example.comin una sola azione.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Documentazione su mod_rewrite per Apache 2.2 .

Se hai sottodomini come forum.example.com, la prima regola dovrebbe essere così com'è. Altrimenti, puoi anche fare una partita negativa contro www.example.com.



0

Prova questo:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

0

Potresti anche usare le seguenti righe che uso e lavoro in modo impeccabile.

(Rimuovi la parte superiore di RewriteCond se non usi CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

Ho appena implementato questo per il mio sito. Funziona come un fascino! Aggiunto all'inizio del mio file .htaccess. Reindirizza tutte le istanze di persone che digitano www o no www, http o https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect

0

Ho testato tutti i suggerimenti sopra riportati, ma nessuno ha coperto l'intero scenario.

Volevo che tutti i visitatori andassero https://www.example1.com/

Alcuni dei codici forniti da altri utenti hanno funzionato per portare URL non sicuri e / o non www a https://www.example1.com/nessuno dei quali coperti https://example1.comper essere convertiti in "www".

Ho il mio sito Web ospitato con GoDaddy, nel caso in cui ciò faccia la differenza.

Questo è il codice che ha funzionato per me:

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

L'ultima riga potrebbe essere anche:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Ma ho usato il codice "301" per inviare il messaggio " spostato in modo permanente " nella speranza che Google e forse altri motori di ricerca aggiornino i vecchi link.

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.