Seguridad y SSL

Cómo forzar HTTPS en Apache con .htaccess (redirección correcta)

Aprende a redirigir todo el tráfico HTTP a HTTPS en Apache usando reglas .htaccess sin romper tu sitio.

Close-up of a smartphone wrapped in a chain with a padlock, symbolizing strong security.

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=301 es redirección permanente (SEO-safe); L detiene 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_rewrite no está habilitado en Apache. Verifica con apachectl -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 de X-Forwarded-Proto (escenario descrito arriba).
  • El .htaccess existe en un directorio donde AllowOverride está en None — 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-requests como 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-Proto para evitar bucles infinitos.
  • Un 500 al guardar el .htaccess casi siempre indica error de sintaxis — usa apachectl 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 -I para confirmar el código 301 y la cabecera Location.
  • 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:

← Todos