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.
- sudo a2enmod reescribir
- sudo servicio apache2 reinicio
- 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