Apache: Redirigir desde http a https en todas sus variantes
Autor: fjavimartin
Fecha de Creación: 18/12/2018
Categorías:
En nuestro artículo de hoy mostraremos como configurar nuestro virtual host en apache para redirigir todas nuestras visitas desde http a https, desde https a http, desde dominio.com a www.dominio.es o directamente redirigir todo el tráfico de un dominio a otro.
Configuración de nuestros VirtualHosts
Partimos de la configuración de básica para un dominio alojado en un servidor con apache para el que estaremos escuchando tanto en el puerto 80 (http) como en el 443 (https).
<VirtualHost *:80> ServerAdmin info@dominio.es ServerName www.dominio.es DocumentRoot /var/www/dominio.es/ <Directory /var/www/dominio.es/> Options FollowSymLinks Indexes AllowOverride All order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/dominio.es_error.log CustomLog ${APACHE_LOG_DIR}/dominio.es_access.log combined </VirtualHost> <VirtualHost *:443> ServerAdmin info@dominio.es ServerName www.dominio.es DocumentRoot /var/www/dominio.es/ <Directory /var/www/dominio.es/> Options FollowSymLinks Indexes AllowOverride All order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/dominio.es_error.log CustomLog ${APACHE_LOG_DIR}/dominio.es_access.log combined SSLEngine on SSLCertificatekeyFile /etc/ssl/certs/dominio.es_le.key SSLCertificateFile /etc/ssl/certs/dominio.es_le.crt </VirtualHost>
Cualquier solicitud dirigida tanto a http://www.dominio.es como a https://www.dominio.es sería atendida por nuestro servidor sin ningún problema.
Redirección desde dominio.es a www.dominio.es
Lo primero que haremos en ambos virtualhost’s será incluir una línea con el ServerAlias correspondiente a nuestro dominio sin www’s con el objetivo de que nuestro servidor atienda también a estas solicitudes.
ServerAlias dominio.es
Lo primero que haremos será incluir la primera redirección desde nuestro dominio sin www’s a nuestro dominio con www añadiendo el siguiente código:
VirtualHost http RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} ^dominio\.es RewriteRule ^(.*)$ http://www.dominio.es$1 [R=permanent,L] VirtualHost https RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} ^dominio\.es RewriteRule ^(.*)$ https://www.dominio.es$1 [R=permanent,L]
Lo que estamos haciendo con estas líneas será, mediante expresiones regulares, determinar las condiciones que tienen que darse para poder redirigir la solicitud y establecer el destino de la redirección.
Redirección desde http a https
De la misma forma que en el anterior apartado veíamos como redirigir las solicitudes desde dominio.es a www.dominio.es cambiando una sola línea podremos redirigir nuestras solicitudes desde http a https. En este caso la modificación solamente se dará en el virtualhost correspondiente que escuchará en el puerto 80.
RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} ^dominio\.es RewriteRule ^(.*)$ https://www.dominio.es$1 [R=permanent,L]
Redirigir dominio completo a https
El último paso será redirigir todas las solicitudes que nos lleguen a http://domino.es o http://www.dominio.es a https://www.dominio.es y para ellos solo necesitaremos una línea.
<VirtualHost *:80> ServerAdmin info@dominio.es ServerName www.dominio.es ServerAlias dominio.es Redirect / https://www.dominio.es/ </VirtualHost>
Resumen
Si hemos ido haciendo las modificaciones poco a poco nuestros VirtualHost’s se parecerán a los siguiente:
<VirtualHost *:80> ServerAdmin info@dominio.es ServerName www.dominio.es # Redirigir http://dominio.es http://www.dominio.es a https://www.dominio.es # Redirect / https://www.dominio.es/ RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} ^dominio\.es RewriteRule ^(.*)$ http://www.dominio.es$1 [R=permanent,L] DocumentRoot /var/www/dominio.es/ <Directory /var/www/dominio.es/> Options FollowSymLinks Indexes AllowOverride All order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/dominio.es_error.log CustomLog ${APACHE_LOG_DIR}/dominio.es_access.log combined </VirtualHost> <VirtualHost *:443> ServerAdmin info@dominio.es ServerName www.dominio.es RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} ^dominio\.es RewriteRule ^(.*)$ https://www.dominio.es$1 [R=permanent,L] DocumentRoot /var/www/dominio.es/ <Directory /var/www/dominio.es/> Options FollowSymLinks Indexes AllowOverride All order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/dominio.es_error.log CustomLog ${APACHE_LOG_DIR}/dominio.es_access.log combined SSLEngine on SSLCertificatekeyFile /etc/ssl/certs/dominio.es_le.key SSLCertificateFile /etc/ssl/certs/dominio.es_le.crt </VirtualHost>
Referencias
https://www.sslshopper.com/apache-redirect-http-to-https.html