2011-06-14 22 views
16

Estoy tratando de forzar a un usuario a ser redirigido al sitio web que no sea www, y forzar https.Forzar no-www y https a través de htaccess

Tengo este tipo de trabajo, pero no fuerza https, cuando se ingresa http.

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://site.com\.net/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

¿Alguna idea sobre lo que estoy haciendo mal?

Respuesta

26

Prueba esta regla:

RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(www\.)?(.+) 
RewriteRule^https://%2%{REQUEST_URI} [R=301,L] 
+0

Aparece el mensaje anterior "Conectado no es de confianza" del navegador cuando intento visitar: 'https: // www.midominio.com 'usando el htaccess de la respuesta aceptada anteriormente. 'http: // mydomainname.co.uk' y' http: // www.mydomainname.co.uk' ambos redireccionan bien. Mi certificado fue generado para 'mydomainname.co.uk'. ¿Alguna idea (o más información que necesita)? – Jon

+0

@Jon: la capa TLS/SSL está encima de HTTP (HTTPS también se conoce como "HTTP sobre TLS/SSL"). Por lo tanto, se establece la conexión TLS/SSL y se valida el certificado antes de que se transmita a HTTP y se lleve a cabo la redirección HTTP. No puedes arreglar eso. – Gumbo

+0

Gracias por la actualización, solo para confirmar: no funciona ** **. (En absoluto, o que usted sepa?) – Jon

3

Basado en el comentario de Gumbo: "se establece la conexión TLS/SSL y el certificado se valida antes de que se dicte a HTTP y la redirección HTTP tiene lugar" le dio a este una prueba (que parece funcionar):

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.blahblah.com/$1 [R,L] 

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

dígame si hay algún problema con este enfoque.

0

El único conjunto de reglas que funciona para mí es la siguiente

# match any URL with www and rewrite it to https without the www 
    RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC] 
    RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L] 

# match non https and redirect to https 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

Las cuestiones de orden, que impide un tercer redirección en algunos casos.

Cuestiones relacionadas