Para forzar HTTPS en Apache con .htaccess, agrega una regla RewriteRule que capture todas las peticiones HTTP y las redirija permanentemente (301) a su equivalente HTTPS. Es la forma más rápida de activar la redirección sin tocar la configuración de Apache directamente.
A continuación encontrarás la regla exacta, sus variantes para casos especiales y los errores más comunes que hacen que la redirección falle o cause bucles infinitos.
La regla básica: HTTP → HTTPS en .htaccess
Abre (o crea) el archivo .htaccess en la raíz de tu sitio y añade lo siguiente:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Esas tres líneas son suficientes para la mayoría de los servidores Apache con SSL activo. Veamos qué hace cada parte:
- RewriteEngine On — activa el motor de reescritura. Sin esto nada funciona.
- RewriteCond %{HTTPS} off — solo aplica la regla cuando la conexión no es HTTPS.
- RewriteRule ^(.*)$ — captura la URL completa y la redirige a
https://conservando host y ruta. - [L,R=301] —
R=301es redirección permanente (SEO-safe);Ldetiene el proceso de reescritura aquí.
Variantes para entornos especiales
Detrás de un proxy inverso o balanceador (Cloudflare, nginx)
Cuando Apache recibe tráfico a través de un proxy, la variable %{HTTPS} puede valer off incluso si el visitante llegó por HTTPS. En ese caso usa la cabecera X-Forwarded-Proto:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Si tu servidor usa tanto acceso directo como proxy, combina ambas condiciones con [OR]:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Redirigir además a www
Si quieres consolidar tráfico en https://www.tudominio.com, agrega una segunda regla después de la redirección HTTPS:
RewriteEngine On
# Primero: HTTP → HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Segundo: sin www → con www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Errores comunes y cómo evitarlos
Bucle de redirección infinita
El síntoma: el navegador muestra "Este sitio redirige demasiadas veces". Las causas más frecuentes:
- El módulo
mod_rewriteno está habilitado en Apache. Verifica conapachectl -M | grep rewrite. - El certificado SSL no está instalado o no escucha en el puerto 443 — Apache nunca pone
HTTPS=on. - Estás detrás de un proxy y usas
%{HTTPS}en lugar deX-Forwarded-Proto(escenario descrito arriba). - El
.htaccessexiste en un directorio dondeAllowOverrideestá enNone— las reglas se ignoran silenciosamente.
Error 500 tras editar .htaccess
Un error de sintaxis en .htaccess provoca un 500 inmediato. Verifica la sintaxis con:
apachectl configtest
También revisa el log de errores de Apache (/var/log/apache2/error.log o /var/log/httpd/error_log) para ver la línea exacta del problema.
La redirección funciona pero hay contenido mixto
Forzar HTTPS en el servidor es solo el primer paso. Si tu HTML tiene recursos cargados con http:// explícito (imágenes, scripts, hojas de estilo), el navegador los bloqueará. Soluciones:
- Cambia las URLs absolutas
http://a relativas (//o simplemente/ruta). - En WordPress activa la opción "Forzar HTTPS" en el plugin SSL o usa
define('FORCE_SSL_ADMIN', true);. - Agrega la cabecera
Content-Security-Policy: upgrade-insecure-requestscomo solución temporal.
Puedes aprender más sobre este tema en nuestra sección de artículos de seguridad SSL.
Verificar que la redirección funciona
Después de guardar el .htaccess, prueba desde la línea de comandos sin seguir redirecciones:
curl -I http://tudominio.com
Deberías ver:
HTTP/1.1 301 Moved Permanently
Location: https://tudominio.com/
Si ves un 200 directo, la regla no se está aplicando. Si ves múltiples Location:, tienes un bucle.
Para comprobar que el certificado responde correctamente:
curl -I https://tudominio.com
El resultado debe ser HTTP/2 200 (o HTTP/1.1 200) sin advertencias de certificado.
Tabla resumen: escenarios y regla recomendada
| Escenario | Condición a usar | Riesgo de bucle |
|---|---|---|
| Apache directo (sin proxy) | %{HTTPS} off |
Bajo si SSL activo |
| Detrás de Cloudflare / nginx | %{HTTP:X-Forwarded-Proto} =http |
Medio si proxy no envía la cabecera |
| Ambos (acceso directo + proxy) | Combinar con [OR] |
Bajo |
| cPanel / Plesk compartido | %{HTTPS} off suele funcionar |
Muy bajo (SSL gestionado por panel) |
Conclusiones clave
- La regla mínima de tres líneas (
RewriteEngine On,RewriteCond %{HTTPS} off,RewriteRule) cubre la mayoría de los casos. - Detrás de un proxy usa
X-Forwarded-Protopara evitar bucles infinitos. - Un 500 al guardar el
.htaccesscasi siempre indica error de sintaxis — usaapachectl configtest. - Forzar HTTPS en el servidor no elimina errores de contenido mixto: también hay que corregir las URLs en el HTML.
- Verifica siempre con
curl -Ipara confirmar el código 301 y la cabeceraLocation. - Una vez confirmado que todo funciona, considera añadir HSTS para blindar la redirección a nivel de navegador.
¿Tienes dudas sobre la configuración SSL de tu servidor o quieres que un experto lo revise por ti? Contáctanos en elenlace.com y te ayudamos a dejarlo bien desde el primer intento.
Preguntas frecuentes
¿Necesito certificado SSL instalado antes de añadir la regla .htaccess?
Sí, es indispensable. La regla redirige el tráfico a https://, pero si Apache no tiene un certificado válido escuchando en el puerto 443, el navegador mostrará un error de conexión o de certificado. Instala primero el SSL (Let's Encrypt, cPanel SSL, etc.) y luego agrega la regla.
¿La redirección 301 afecta negativamente al SEO?
No, al contrario. Una redirección 301 correctamente configurada transfiere prácticamente todo el "link equity" a la versión HTTPS. Google también prefiere y favorece en rankings a los sitios que usan HTTPS. El único riesgo SEO sería una cadena larga de redirecciones (HTTP → HTTPS → www → otra URL), que conviene evitar.
¿Dónde exactamente pongo el código en el .htaccess?
Colócalo al principio del archivo, antes de cualquier otra regla de WordPress, Joomla o de la aplicación. Si ya existe una sección RewriteEngine On, no la dupliques — simplemente añade las líneas RewriteCond y RewriteRule justo debajo de esa línea existente.
¿Puedo usar esta misma regla en hosting compartido (cPanel)?
Sí. En la mayoría de los planes de hosting compartido con cPanel, el módulo mod_rewrite ya está activo y AllowOverride All está configurado para tu directorio public_html. Si el panel ofrece la opción "Forzar HTTPS" en su interfaz de SSL, úsala — genera exactamente estas mismas reglas de forma automática y evita errores de sintaxis manual.
¿Prefieres que lo hagamos por ti? En El Enlace resolvemos hosting y desarrollo web profesional.
Compara proveedores
Otros proveedores y guías que vale la pena comparar: