Tengo el siguiente código htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Quiero que mi sitio sea redirigido https://www.
con HTTPS y aplique el www.
subdominio, pero cuando accedo http://www.
(sin HTTPS), no me redirige https://www
con HTTPS.
RewriteCond %{HTTPS} =off
Respuestas:
Para forzar primero HTTPS, debe verificar la variable de entorno correcta
%{HTTPS} off
, pero su regla anterior antepone elwww.
Dado que tiene una segunda regla para aplicarwww.
, no la use en la primera regla.Sobre la representación
Cuando está detrás de algunas formas de representación, por medio de las cuales el cliente se conecta a través de HTTPS a un proxy, equilibrador de carga, aplicación de Pasajero, etc., la
%{HTTPS}
variable nunca puede estaron
y causar un ciclo de reescritura. Esto se debe a que su aplicación en realidad está recibiendo tráfico HTTP simple a pesar de que el cliente y el proxy / equilibrador de carga están utilizando HTTPS. En estos casos, verifique elX-Forwarded-Proto
encabezado en lugar de la%{HTTPS}
variable. Esta respuesta muestra el proceso apropiado.fuente
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
una URL como exaple.com/?bla=%20 se convirtió en exaple.com/?bla=%2520 , es decir, el signo de porcentaje se ha codificado. Considere usar la banderaNE
para evitar la doble codificación:RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
X-Forwarded-Proto
encabezado para verificar HTTPS en lugar de la%{HTTPS}
variable. No dijiste qué parte causa el bucle,www
o la parte HTTPS, pero eso es lo primero que me viene a la mente.http://example.com
(es decir, HTTP y no www), obtendrá una doble redirección. Primero ahttps://example.com
(la primera regla) y luego ahttps://www.example.com
(la segunda regla). Puede solucionar esto simplemente invirtiendo estas dos reglas, ya que ambas reglas redirigen a HTTPS independientemente.La respuesta de Michals funcionó para mí, aunque con una pequeña modificación:
Problema:
cuando tiene un solo certificado de seguridad del sitio , un navegador que intenta acceder a su página sin https: // www. (o cualquier dominio que cubra su certificado) mostrará una pantalla de advertencia roja fea incluso antes de que reciba la redirección a la página https segura y correcta.
Solución
Primero use el redireccionamiento a www (o el dominio que esté cubierto por su certificado) y solo luego realice el redireccionamiento https. Esto asegurará que sus usuarios no se enfrenten a ningún error porque su navegador ve un certificado que no cubre la URL actual.
fuente
https://example.com
, pero en mi opinión, ese es el formato menos probable que un usuario escriba. (La respuesta aceptada también tendrá el mismo problema)https://
sinwww
tener un certificado solo en elwww
, simplemente agregue esta regla a la solución:RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
simplemente vuelve ahttp
cuando intenta conectarsehttps://example.com
para evitar un error de certificado.http://example.com
(es decir, HTTP y no www)Si está utilizando CloudFlare o un CDN similar, obtendrá un error de bucle infinito con las soluciones% {HTTPS} proporcionadas aquí. Si es usuario de CloudFlare, deberá usar esto:
fuente
=http
a!=https
nuestros ambientes.X-Forwarded-Proto
encabezado no se declaró si http, también lo!=https
hizo el truco.{HTTPS}
no estaba funcionando. Lo intenté{ENV:HTTPS}
e incluso{SERVER_PORT} 443
, pero al final fue porque necesitaba verificar los encabezados de solicitud HTTP personalizados de Cloudflare.¡MALA SOLUCIÓN Y POR QUÉ!
Nunca use la solución a continuación porque cuando usa su código, es algo así como:
El navegador va a:
Luego redirige a:
Luego redirige a:
Esta es demasiada solicitud al servidor.
La mayoría de las respuestas, incluso aceptadas, tienen este problema.
MEJOR SOLUCIÓN Y LA RESPUESTA
¡Este código tiene una
[OR]
condición para evitar cambios duales en la URL!fuente
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
wp-content/cache/page_enhanced/
y luego, etc. ¿Cómo puedo arreglar esto? Editar: Parece que necesito ponerlo en la parte superior.htaccess
. Gracias por el guión :)Esta es la mejor manera que encontré para Proxy y no para usuarios proxy
fuente
Hay muchas soluciones por ahí. Aquí hay un enlace a la wiki de apache que trata este problema directamente.
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
fuente
RewriteCond %{HTTPS} off
queRewriteCond %{HTTPS} !=on
esa redirección siempre sucedería, esta parece ser la mejor respuesta para mí.Para redirigir http: // o https: // a https: // www , puede usar la siguiente regla en todas las versiones de apache:
Apache 2.4
Tenga en cuenta que la variable% {REQUEST_SCHEME} está disponible para su uso desde apache 2.4 .
fuente
Si está en CloudFlare, asegúrese de usar algo como esto.
Esto lo salvará del bucle de redireccionamiento y redirigirá su sitio a SSL de forma segura.
PD: ¡Es una buena idea verificar si mod_rewrite.c!
fuente
fuente
Notas: asegúrese de haber realizado los siguientes pasos
Ahora su .htaccess funcionará y su sitio redirigirá a http: // a https: // www
fuente
Similar a la solución de Amir Forsati htaccess redirigir a https: // www pero para el nombre de dominio variable, sugiero:
fuente
Establecer en su archivo .htaccess
fuente
Utilicé el siguiente código de este sitio web, funciona muy bien https://www.freecodecamp.org/news/how-to-redirect-http-to-https-using-htaccess/
Espero eso ayude
fuente
Intento la primera respuesta y no funciona ... Este trabajo:
fuente