www rewritecond non http_host htaccess and .htaccess redirect

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]:

  1. L = Si la regla fue procesada, no procese 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 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

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 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