redireccionar htaccess force carpeta cambiar all apache .htaccess mod-rewrite redirect https

apache - force - htaccess redirigir a https:// www



redireccionar http a https wordpress (12)

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 a https://www. con HTTPS, y hacer cumplir el www. subdominio, pero cuando accedo a http://www. (sin HTTPS), no me redirige a https://www con HTTPS.


¡MAL SOLUCIÓN Y POR QUÉ!

Cuando usas el código de respuesta aceptado:

RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

el navegador va a

http://example.com

luego redirige a:

https://example.com

luego redirige a:

https://www.example.com

Esto es demasiado pedido al servidor

LA MEJOR SOLUCION Y LA RESPUESTA

¡Este código tiene una condición [OR] para evitar cambios duales en la url!

RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

La mayoría de las respuestas, incluso aceptadas, no usan este truco.


Esta es la mejor manera que encontré para Proxy y no para usuarios de proxy

RewriteEngine On ### START WWW & HTTPS # ensure www. RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # ensure https RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ### END WWW & HTTPS


Establecer en su archivo .htaccess

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


Esto funcionará tanto para https como para www.

RewriteCond %{HTTPS} !=on # This checks to make sure the connection is not already HTTPS RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]


Hay muchas soluciones por ahí. Aquí hay un enlace a la wiki de apache que trata este tema directamente.

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On # This will enable the Rewrite capabilities RewriteCond %{HTTPS} !=on # This checks to make sure the connection is not already HTTPS RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] # This rule will redirect users from their original location, to the same location but using HTTPS. # i.e. http://www.example.com/foo/ to https://www.example.com/foo/ # The leading slash is made optional so that this will work either in httpd.conf # or .htaccess context


Intento la primera respuesta y no funciona ... Este trabajo:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{ENV:HTTPS} !=on RewriteRule ^.*$ https://%{SERVER_NAME}%{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


La respuesta de Michals funcionó para mí, aunque con una pequeña modificación:

Problema:

cuando tiene un certificado de seguridad de un solo sitio , un navegador que intenta acceder a su página sin https: // www. (o cualquier dominio que cubra su certificado) mostrará una fea pantalla de advertencia roja antes de que reciba la redirección a la página https segura y correcta.

Solución

Primero use la redirección a www (o cualquier dominio cubierto por su certificado) y solo luego realice la redirección https. Esto asegurará que sus usuarios no enfrenten ningún error porque su navegador ve un certificado que no cubre la url actual.

#First rewrite any request to the wrong domain to use the correct one (here www.) RewriteCond %{HTTP_HOST} !^www/. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] #Now, rewrite to HTTPS: RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Para forzar primero HTTPS, debe %{HTTPS} off variable de entorno correcta %{HTTPS} off , pero su regla anterior precede a www. Ya que tienes una segunda regla para hacer cumplir www. , no lo uses en la primera regla.

RewriteEngine On RewriteCond %{HTTPS} off # First rewrite to HTTPS: # Don''t put www. here. If it is already there it will be included, if not # the subsequent rule will catch it. RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Now, rewrite any request to the wrong domain to use www. # [NC] is a case-insensitive match RewriteCond %{HTTP_HOST} !^www/. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Acerca de la representación

Cuando detrás de algunas formas de proxy, el cliente se conecta a través de HTTPS a un proxy, a un equilibrador de carga, a la aplicación Passenger, etc., es posible que la variable %{HTTPS} nunca esté on y provoque un bucle 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 equilibrador de carga / proxy están utilizando HTTPS. En estos casos, verifique el encabezado X-Forwarded-Proto lugar de la variable %{HTTPS} . Esta respuesta muestra el proceso apropiado.


Para redireccionar http: // o https: // a https: // www puede usar la siguiente regla en todas las versiones de apache:

RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www/. RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Apache 2.4

RewriteEngine on RewriteCond %{REQUEST_SCHEME} http [OR] RewriteCond %{HTTP_HOST} !^www/. RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Tenga en cuenta que la variable% {REQUEST_SCHEME} está disponible para su uso desde Apache 2.4 .


Si está utilizando CloudFlare o un CDN similar, obtendrá un error de bucle infinito con las soluciones% {HTTPS} que se proporcionan aquí. Si eres usuario de CloudFlare, necesitarás usar esto:

RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Si estás en CloudFlare, asegúrate de usar algo como esto.

# BEGIN SSL Redirect <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # END SSL Redirect

Esto lo salvará del bucle de redirección y redirigirá su sitio a SSL de manera segura.

PS ¡Es una buena idea si comprueba el mod_rewrite.c!


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

Notas: Asegúrate de haber hecho los siguientes pasos.

  1. sudo a2enmod reescribir
  2. sudo servicio apache2 reinicio
  3. Agregue lo siguiente en su archivo vhost, ubicado en /etc/apache2/sites-available/000-default.conf

<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all Require all granted </Directory>

Ahora su .htaccess funcionará y su sitio redirigirá a http: // a https: // www