Forzar SSL y www en .htaccess

12

Estoy buscando una forma de forzar SSL y www.

He podido forzar ambos por separado, pero juntos sigo teniendo problemas de redirección. El siguiente código funciona cuando se maneja una URL en este formato: http://example.comy se redirige correctamente a, https://www.example.compero cuando la URL entrante https://example.comno se reenvía https://www.example.com, ¿alguna sugerencia?

EDITAR: también debe enviar 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]
Stephen
fuente

Respuestas:

7

La primera línea se usa para evitar que se reescriban las URL internas. Eso puede hacer que se muestren diferentes páginas, así que lo eliminé.

Si el host se example.comsolicita o no a través de HTTPS, se reescribirá en https://example.com/. Es decir, se vuelve a escribir http://example.com, http://www.example.comy https://example.comque https://www.example.comen una sola acción.

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

Documentación sobre mod_rewrite para Apache 2.2 .

Si tiene subdominios como forum.example.com, la primera regla debe ser como es. De lo contrario, también puedes hacer un partido negativo en contra www.example.com.

Lekensteyn
fuente
0

¿La tercera línea no tiene que ser:

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
fuente
0

Prueba esto:

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]
Arvin
fuente
0

También podría usar las siguientes líneas que yo uso y trabajar sin problemas.

(Quite el RewriteCond superior si no usa 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]
equipo
fuente
0

Acabo de implementar esto para mi sitio. ¡Funciona de maravilla! Agregado a la parte superior de mi archivo .htaccess. Redirige todas las instancias de personas que escriben 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
usuario67283
fuente
0

Probé todas las sugerencias anteriores, pero ninguna cubrió todo el escenario.

Quería que todos los visitantes fueran a https://www.example1.com/

Algunos de los códigos proporcionados por otros usuarios trabajaron para llevar URL no seguras y / o no www a https://www.example1.com/, sin embargo, ninguno de ellos estaba cubierto https://example1.compara convertirse también a "www".

Tengo mi sitio web alojado con GoDaddy, en caso de que esto haga alguna diferencia.

Este es el código que funcionó para mí:

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

La última línea también podría ser:

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

Pero usé el código "301" para enviar el mensaje " movido permanentemente " con la esperanza de que Google y quizás otros motores de búsqueda actualicen los enlaces antiguos.

onpre
fuente