rewritecond - .htaccess redirecciona www a no-www con SSL/HTTPS
rewritecond %{ http_host to https (8)
Tengo varios dominios operando bajo un solo archivo .htaccess, cada uno asegurado 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 y que no funciona:
RewriteCond %{HTTP_HOST} ^www.%{HTTP_HOST}
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L]
Ejemplo:
https://www.strategice.com
debería redirigir a ...
https://strategice.com
¡Gracias por adelantado!
El certificado debe abarcar www y no https. Algunos certificados de proveedor cubren ambos para www.xxxx.yyy, pero solo uno para xxxx.yyy.
Activar reescribe:
RewriteEngine On
Haga que todos los http usen https:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301]
Haga que solo https use el https que no sea www.
RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} ^www[.].+$
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301]
No se puede procesar https no www, de lo contrario, se produce un bucle.
En [L, R = 301]:
- L = Si la regla fue procesada, no procese más.
- R = 301 = Indica al navegador / robot que realice un redireccionamiento permanente.
Más genérico
Un enfoque más genérico, no dependiente del puerto, es:
RewriteCond %{HTTP_HOST} ^www/.
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA]
para hacer cualquier url con www
soltarlo.
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 URL que no sea https, incluso para los sistemas posteriores a los balanceadores de carga que eliminan https, use https.
Tenga en cuenta que no he probado las opciones forwarded
, por lo que agradecería recibir comentarios sobre cualquier problema con ellas. Esas líneas podrían omitirse si su sistema no está detrás de un equilibrador de carga.
TO HTTP_HOST o no
Puede usar ${HTTP_HOST}
para formar parte de la URL en RewriteRule
, o puede usar su texto explícito de nombre de dominio canónico ( xxxx.yyy
arriba).
Especificar el nombre de dominio asegura explícitamente que no se usen medios de flexión de caracteres ligeros en la URL proporcionada por el usuario para posiblemente engañar a su sitio y hacer algo para lo que no esté preparado, o al menos asegurar que aparezca el nombre de dominio adecuado. en la barra de direcciones, independientemente de qué cadena de URL abrió la página.
Incluso podría ayudar a convertir dominios codificados con punycode para mostrar los caracteres Unicode adecuados en la barra de direcciones.
Esto funcionó para mí:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www/.(.*)
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Para exigir que no sean www y https en una única solicitud, puede usar 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 la bandera R 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 a R = 301 .
Para mí fue mejor codificar "example.com" como cadena, así que necesito menos reglas, incluso puedes usarlo para redirigir desde .org a .com o similar también:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^example/.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]
</IfModule>
Ref: Apache redirige www a no www y HTTP a HTTPS
a
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 predeterminada sea http://www.example.com/ , simplemente cambie la tercera y la quinta línea:
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]
Su condición nunca será verdadera, porque es como "if (a == a + b)".
Intentaría lo siguiente:
RewriteCond %{HTTP_HOST} ^www/.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]
Esto capturará "google.com" de "www.google.com" en% 1, el resto en $ 1 y después de eso combinando el 2, cuando HTTP_HOST comienza con www (con o sin https).
www a no www con 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]
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 lo enviará a https: //xxx.yyy.
La Parte 2 examina la URL ingresada y comprueba si HTTPS, si no, envía a HTTPS
Hecho en este orden, sigue la lógica y no ocurre ningún error.
AQUÍ está mi versión COMPLETA en htaccess lateral 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