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://wwwcon HTTPS.

RewriteCond %{HTTPS} =offRespuestas:
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 estarony 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-Protoencabezado 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 banderaNEpara evitar la doble codificación:RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]X-Forwarded-Protoencabezado para verificar HTTPS en lugar de la%{HTTPS}variable. No dijiste qué parte causa el bucle,wwwo 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://sinwwwtener 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 ahttpcuando intenta conectarsehttps://example.compara 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
=httpa!=httpsnuestros ambientes.X-Forwarded-Protoencabezado no se declaró si http, también lo!=httpshizo 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} offqueRewriteCond %{HTTPS} !=onesa 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