Redirección HTTP a HTTPS en apache

Author
By Darío Rivera
Posted on 2020-05-24 in Apache

Una vez has logrado instalar un certificado SSL en tu sitio web deseas que todo el tráfico actual por HTTP sea redireccionado a HTTPS. Con apache esta labor es bastante sencilla y puedes realizarla de dos maneras principalmente que veremos a coninuación.

Antes se seguir con este post, te recomandamos leer nuestro último artículo

Certificado SSL con Let's Encrypt

En él aprenderás a instalar un certificado SSL para tu sitio web de manera totalmente gratis y rápida. Dicho esto veamos las dos formas principales con las que podemos redireccionar el tráfico HTTP a HTTPS.

Desde el archivo de configuración del dominio

Cuando configuraste tu dominio con apache muy seguramente creaste un archivo de configuración .conf en sites-available u otra ubicación en tu servidor. Este archivo es diferente a la configuración por ssl que debería estar separada en un archivo diferente. Vamos pues a modificar el archivo .conf de tu dominio y a agregar una redirección permanente hacia tu versión HTTPS así:

ServerName example.com
ServerAlias www.example.com

# HTTP to HTTPS redirection
Redirect permanent / https://example.com/

La directiva Redirect permanent envía todo el tráfico a nuestra versión HTTPS del sitio con un código HTTP 301. Lo cual es bastante conveniente según las recomendaciones SEO.

Desde el archivo .htacces de tu sitio

Otra forma de realizar la misma redirección es agregar las directivas en el archivo de configuración .htaccess del sitio web así:

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

Nota que la regla R=301 asegura que la redirección se realice enviando un código HTTP 301 - Moved Permanently, al igual que en el ejemplo anterior.

Verifica las redicciones de tu web

Como punto adicional deberías verificar que las redicciones de tu web estén funcionando de manera correcta. En este post, hemos de suponer que www.example.com redirije a example.com y porsupuesto el flujo por http redirije a https. Esto lo puedes verificar con curl si obtienes un HTTP 301 - Moved Permanently.

$ curl -I www.example.org
HTTP/1.1 301 Moved Permanently
Date: Sun, 24 May 2020 16:41:43 GMT
Server: Apache/2.4.38 (Debian)
Location: https://example.org/
Content-Type: text/html; charset=iso-8859-1
$ curl -I http://example.org
HTTP/1.1 301 Moved Permanently
Date: Sun, 24 May 2020 16:42:09 GMT
Server: Apache/2.4.38 (Debian)
Location: https://example.org/
Content-Type: text/html; charset=iso-8859-1

Nota que location es la URL hacia donde fue redirijido el tráfico.


Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.