2009-09-25 18 views
33

Tengo varios dominios que operan en un solo archivo .htaccess, cada uno protegido a través de SSL. Necesito forzar https en todos los dominios a la vez que garantizo que www redirija a no pertenecientes a www. Esto es lo que estoy usando que no funciona:.htaccess redirigir www a no www con SSL/HTTPS

RewriteCond %{HTTP_HOST} ^www.%{HTTP_HOST} 
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L] 

Ejemplo:

https://www.strategice.com 

debe redirigir a ...

https://strategice.com 

Gracias de antemano!

+2

Marcar una respuesta correcta ya! –

Respuesta

16

Su condición nunca será cierta, porque es como "if (a == a + b)".

me gustaría probar el siguiente:

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

Esto captura "google.com" de "www.google.com" en 1%, el resto en $ 1 y después de que la combinación de la figura 2, cuando HTTP_HOST comienza con www (con o sin https).

+0

Desafortunadamente, esto todavía crea un error "La conexión no es de confianza" cuando alguien intenta acceder a https://www.domain.com – aegenes

+0

Hmm pero está redirigiendo correctamente? Si es así, podría ser un problema de certificado. – Fabian

+2

Consulte [this] (http://stackoverflow.com/a/10726167/372643) para obtener el certificado. – Bruno

2

Esto funcionó para mí:

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

certificado debe cubrir tanto www y sin www https. Algunos certificados de proveedor cubren ambos para www.xxxx.yyy, pero solo uno para xxxx.yyy.

Encienda vuelve a escribir:

RewriteEngine On 

haz todas HTTPS usar http:

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

hacer sólo https www utilizan el no-www https:

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{HTTP_HOST} ^www[.].+$ 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301] 

no puede ser un proceso no -www https, de lo contrario, se produce un bucle.

En [L, R = 301]:

  1. L = Si se procesó la regla, no procesar más.
  2. R = 301 = Indica al navegador/robot que realice un redireccionamiento permanente.

más genérico

Un enfoque más genérico - no puerto dependiente - es:

RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

para hacer cualquier URL con www deje caer.

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTPS} !1 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTP:X-Forwarded-SSL} !on 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

para forzar cualquier no-https url, incluso para aquellos sistema aguas abajo de equilibradores de carga que caen https, utilizan https.

Tenga en cuenta que no he probado las opciones forwarded, por lo que agradecería cualquier comentario sobre ellas.Esas líneas podrían omitirse si su sistema no está detrás de un equilibrador de carga.

A HTTP_HOST o no

Puede utilizar ${HTTP_HOST} a ser parte de la URL en el RewriteRule, o puede utilizar el texto explícito nombre de dominio canónico (xxxx.yyy arriba).

La especificación del nombre de dominio garantiza explícitamente que no se utilizan medios de flexión de caracteres ligeros en la URL proporcionada por el usuario para posiblemente engañar a su sitio haciendo algo para lo que podría no estar preparado, o al menos el nombre de dominio apropiado aparece en la barra de direcciones, independientemente de qué cadena de URL abrió la página.

Incluso podría ayudar a convertir dominios codificados en punycode para mostrar los caracteres Unicode adecuados en la barra de direcciones.

+0

¡Funciona como un amuleto! –

+0

¡Funciona increíble! Gracias por la explicación. –

44

www a www no por https

RewriteEngine on 

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

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+1

"RewriteRule^(. *) $ Http: //% 1/$ 1 [R = 301, L]" se cambió a "RewriteRule^(. *) $ Https: //% 1/$ 1 [R = 301, L ] "(por @KenVerhaegen) de lo contrario" redirigiría primero a no http, y luego a https ... por lo que ahora podemos evitar la segunda redirección posiblemente desencadenada ". – alexbt

1
RewriteEngine On 

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

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

Esto funcionó para mí después de mucho ensayo y error. La primera parte es del usuario anterior y capturará www.xxx.yyy y enviar a https://xxx.yyy

Parte 2 mira URL y comprueba si ingresó HTTPS, si no, se envía a HTTPS

hace en este orden, sigue la lógica y no ocurre ningún error.

aquí está mi versión completa en .htaccess lado con WordPress:

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

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 


# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
2

Hacer cumplir sin www y https en una única solicitud, puede utilizar la siguiente regla en su .htaccess:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\. [OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ 
RewriteRule^https://%1%{REQUEST_URI} [NE,L,R] 

Esto redirige http://www.example.com/ o https://www.example.com/ a ssl no www https://example.com/.

Estoy usando R Temp Redirect para fines de prueba y para evitar el almacenamiento en caché del navegador. Si desea que el redireccionamiento sea permanente, simplemente cambie el indicador R al R = 301.

+0

hmm pero aun así cuando ingreso al sitio con www safari dice que la página es insegura y Opera no quiere redirigir ninguna opción con o sin www a ssl, ¿por qué? –

1

Ref: Apache redirect www to non-www and HTTP to HTTPS

http://example.com

http://www.example.com

https://www.example.com

a

https://example.com

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [L,NE,R=301] 

Si en lugar de example.com desea que la URL por defecto para ser www.example.com, entonces simplemente cambiar la tercera y la quinta líneas:

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [L,NE,R=301] 
Cuestiones relacionadas