Apache redirige www a no www y viceversa en Ubuntu 18.04

27 feb 2021 5 min di lettura
Apache redirige www a no www y viceversa en Ubuntu 18.04
Indice dei contenuti

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.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.