Redirigir HTTP a HTTPS con .htaccess
Redirige HTTP a HTTPS con .htaccess en Apache: redirección 301 para todo el sitio, un dominio o carpetas concretas, la versión para Nginx y cómo probarla.
Después de instalar un certificado SSL/TLS, tu sitio responde tanto en http:// como en https://. Forzar HTTPS hace que cada visitante y cada motor de búsqueda use la versión cifrada. En Apache, puedes redirigir HTTP a HTTPS con reglas de reescritura en el archivo .htaccess. Para entender por qué importa, consulta por qué deberías redirigir todo el tráfico HTTP a HTTPS.
Antes de empezar
- Tienes instalado un certificado SSL/TLS válido y
https://yourdomain.comcarga sin advertencias del navegador. - Apache tiene
mod_rewritehabilitado. En Debian o Ubuntu, ejecutasudo a2enmod rewritey reinicia Apache. - La directiva
AllowOverridedel sitio permite reglas de.htaccess.
Redirigir todo el tráfico de HTTP a HTTPS
Abre .htaccess en la raíz de tu sitio (por ejemplo public_html). Si no existe, créalo. Añade estas líneas cerca del principio:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]R=301 hace que la redirección sea permanente, para que los navegadores y los buscadores actualicen la URL a HTTPS.
Forzar HTTPS en un solo dominio
Si dos dominios sirven el mismo sitio y solo quieres redirigir uno de ellos:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain1\.com$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Sustituye yourdomain1.com por tu dominio.
Forzar HTTPS en carpetas concretas
Para redirigir solo algunas carpetas, enuméralas en la regla:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(folder1|folder2|folder3)(/.*)?$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Sustituye los nombres de carpeta por los tuyos.
Forzar HTTPS detrás de un proxy o CDN
Si Cloudflare o un balanceador de carga termina el TLS antes de Apache, %{HTTPS} siempre está en off y la regla anterior entra en bucle. Comprueba la cabecera reenviada en su lugar:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Con Cloudflare, configura también SSL/TLS en Full o Full (strict), no en Flexible.
Forzar HTTPS en Nginx
Nginx no lee .htaccess. Añade un bloque de servidor independiente para el puerto 80 que redirija todo:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}Comprueba la configuración con sudo nginx -t y, después, recárgala con sudo systemctl reload nginx.
Comprobar la redirección
Ejecuta esto desde cualquier ordenador:
curl -I http://yourdomain.com/La respuesta debe mostrar 301 Moved Permanently y una cabecera Location: que empiece por https://. Antes de probarla en el navegador, borra su caché, porque los navegadores guardan en caché las redirecciones permanentes.
