Introducción
Cuando su sitio web o aplicación está en funcionamiento con un dominio, a menudo es preferible permitir que los usuarios accedan a él a través del nombre de dominio simple o mediante www. Si bien hay muchas formas de configurarlo, su mejor opción, por razones de coherencia y SEO, es elegir qué dominio prefiere, simple o www y redirigir el otro a su dominio preferido. Este tipo de redireccionamiento se denomina redireccionamiento permanente o "redireccionamiento 301" y se puede configurar fácilmente configurando correctamente los registros de recursos DNS y el servidor web.
Este tutorial le mostrará cómo redirigir una URL www a no www y viceversa, por ejemplo, de www.example.it a example.it, con Apache en Ubuntu 18.04.
Prerrequisitos
Este tutorial asume que tiene privilegios de superusuario ( sudo o root) en el servidor que ejecuta Apache. Si aún no lo ha configurado, siga este tutorial: Configuración inicial de Ubuntu 18.04 LTS.
Se supone que Apache está instalado. Si no está instalado, siga este tutorial: Cómo instalar LAMP (Apache MySQL PHP) en Ubuntu 18.04 LTS.
También es necesario tener disponible un nombre de dominio activo y en funcionamiento. Si los registros DNS ya están activos y configurados correctamente, omita el siguiente párrafo.
Configurar registros DNS
Para configurar la redirección deseada, www.example.it a example.it o viceversa, debe tener un registro A para cada nombre.
El nombre de host debe ser su dominio, por ejemplo, it, y la dirección IP debe estar configurada como la dirección IP pública de su servidor Apache. Esto creará automáticamente un registro A que apunte su dominio a la dirección IP especificada.
A continuación, agregue otro registro A con " www " como nombre de host (o "www.example.it" si solo "www" no funciona) y especifique la misma dirección IP.
Nota: Esto también funcionará con registros CNAME siempre que el registro A del nombre canónico se refiera a la dirección IP del servidor web Apache.
Su servidor ahora debería ser accesible a través del dominio www y no www, pero aún necesitamos configurar el redireccionamiento.
Habilitar módulo de reescritura
Para realizar la redirección 301, usaremos el módulo mod_rewrite de Apache. De esta forma, los usuarios podrán acceder a su sitio con o sin el prefijo www y serán redirigidos al dominio de su elección.
Primero, habilite el módulo mod_rewrite con este comando:
sudo a2enmod rewrite
Reinicie Apache:
sudo service apache2 restart
Con el módulo Rewrite habilitado, podemos configurar Apache con las reglas de redirección usando el archivo.htaccess o insertando las reglas de redirección directamente en el archivo de configuración de Apache.
Veamos primero cómo configurar las reglas de redireccionamiento directamente en el archivo de configuración de Apache. Si desea utilizar el archivo.htaccess para establecer las reglas de redireccionamiento, omita el siguiente párrafo.
Redirigir con el archivo.conf de Apache: primer método
Veamos cómo crear las reglas de redireccionamiento en el archivo de configuración de Apache sin tener que habilitar y crear el htaccess.
Abra el archivo de configuración de Apache:
sudo nano /etc/apache2/sites-enabled/000-default.conf
El archivo debería verse así:
<VirtualHost *:80>...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html...
ServerName TUO_NOME_DOMINIO.it
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined...
</VirtualHost>
Agregue las siguientes líneas de código antes de cerrar la etiqueta </Virtualhost>, para configurar el redireccionamiento de www a non-www:
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Busque DocumentRoot de su sitio y anótelo. De forma predeterminada, la carpeta raíz (DocumentRoot ) es /var /www /html, por lo que usaremos este directorio en nuestra configuración de ejemplo.
Agregue la siguiente directiva de directorio al final del archivo y asegúrese de reemplazar DocumentRoot con su directorio (si es diferente); de lo contrario, deje lo siguiente:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Entonces, el resultado se verá así:
<VirtualHost *:80>...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html...
ServerName TUO_NOME_DOMINIO.it
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined...
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</VirtualHost>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Reinicie Apache:
sudo service apache2 restart
Si desea realizar la redirección inversa, es decir, de no www a www, modifique las líneas de código de la siguiente manera:
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_HOST}!^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Luego reinicia Apache:
sudo service apache2 restart
En este punto, la redirección para Apache debería funcionar correctamente, sin usar el archivo.htaccess.
Si usa certificados SSL, por lo que tiene una conexión activa con el protocolo HTTPS y desea redirigir de www a non-www (o viceversa) y de HTTP a HTTPS, le recomiendo usar htaccess (el segundo método, siguiente párrafo).
Habilite el archivo.htaccess - Segundo método
Si siguió el método anterior, ya debería tener una redirección configurada correctamente y no necesita seguir leyendo. Si desea utilizar el archivo.htaccess para configurar la redirección, continúe leyendo.
Para habilitar.htaccess, abra su archivo de configuración de Apache. En Ubuntu, el archivo de configuración predeterminado se encuentra en /etc/apache2/sites-enabled/000-default.conf, así que abra el archivo:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Busque DocumentRoot de su sitio y anótelo. De forma predeterminada, la carpeta raíz (DocumentRoot ) es /var /www /html, por lo que usaremos este directorio en nuestra configuración de ejemplo.
Agregue la siguiente directiva de directorio al final del archivo y asegúrese de reemplazar DocumentRoot con su directorio (si es diferente); de lo contrario, deje lo siguiente:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
El archivo de configuración ahora debería verse así:
<VirtualHost *:80>...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName example.it
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined...
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Ahora reinicie Apache para que el cambio surta efecto:
sudo service apache2 restart
Apache está configurado para leer archivos.htaccess ubicados en cualquier lugar del directorio /var /www /html. Ahora agreguemos las reglas de reescritura para la redirección.
Ahora cree o modifique el archivo.htaccess para habilitar las reglas de redireccionamiento. Muevamos directorios a DocumentRoot, en nuestro caso /var /www /html:
cd /var/www/html
Creemos o modifiquemos el archivo .htaccess:
sudo nano.htaccess
Por supuesto, si aún no ha creado el archivo, estará vacío. Ahora configuremos el redireccionamiento de www a non-www o de non-www a www.
Redirigir de www a no www
Si desea redirigir a los usuarios de www a no www, ingrese esta configuración:
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Los cambios deberían surtir efecto de inmediato. Si está utilizando HTTPS, debe cambiar las reglas de esta manera:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
Redirigir de no www a www
Si desea redirigir a los usuarios que no tienen www a www, ingrese esta configuración:
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_HOST}!^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Los cambios deberían surtir efecto de inmediato. Si está utilizando HTTPS, debe cambiar las reglas de esta manera:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST}!^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
Conclusión
En este tutorial aprendimos cómo configurar las reglas de redireccionamiento para Apache2 de www a non-www y viceversa, y de http a https. Hemos visto dos métodos diferentes, usando el archivo de configuración de Apache2 directamente y usando el archivo.htaccess.
¡Eso es todo! La redirección de Apache ahora está configurada correctamente.