Las re­di­re­c­cio­nes o desvíos de Apache son útiles en muchas si­tua­cio­nes. Entre otras cosas, puedes utilizar los prácticos Redirects para dirigir a los vi­si­ta­n­tes de la versión HTTP a la versión HTTPS de tu sitio web, redirigir el tráfico de una URL www a una URL sin www o incluso cambiar los nombres de sitios web y di­re­c­to­rios. Te ayudamos a entender y co­n­fi­gu­rar las re­di­re­c­cio­nes de Apache en CentOS y Ubuntu.

Se­r­vi­do­res dedicados
Re­n­di­mie­n­to e in­no­va­ción
  • Pro­ce­sa­do­res de última ge­ne­ra­ción
  • Hardware dedicado de alto re­n­di­mie­n­to
  • Seguridad de primer nivel

Redirect 301 o 302: ¿Cuál es la di­fe­re­n­cia?

Al analizar las re­di­re­c­cio­nes o desvíos, es im­po­r­ta­n­te di­s­ti­n­guir entre Redirects 301 y 302. El primer código de estado (301) re­pre­se­n­ta un desvío pe­r­ma­ne­n­te, mientras que el segundo (302) indica un desvío temporal.

Una re­di­re­c­ción 301 es mucho más ape­te­ci­ble desde la pe­r­s­pe­c­ti­va del SEO. Si un ra­s­trea­dor de motor de búsqueda se encuentra con un Redirect de este tipo, entiende que se trata de un desvío pe­r­ma­ne­n­te. Por esta razón, no solo toma nota de la nueva URL, sino que también inicia el proceso de tra­n­s­fe­re­n­cia de cualquier valor de Page Rank de la antigua a la nueva URL, por tanto, la cla­si­fi­ca­ción SEO ya alcanzada se mantiene.

Si, por el contrario, un ra­s­trea­dor detecta una re­di­re­c­ción 302, anota la nueva dirección y sigue adelante. De­pe­n­die­n­do del ra­s­trea­dor, puede dejar una marca en la URL para volver a visitarla en el futuro. Esto sucede porque un Redirect 302 se supone que indica que el desvío es solo temporal y que la URL “real” volverá a estar en línea pronto.

Consejo

Al crear un desvío, es­pe­ci­fi­ca siempre que se trata de un Redirect 301. En muchas si­tua­cio­nes, se usa el Redirect 302 por defecto si no se es­pe­ci­fi­ca el tipo de re­di­re­c­ción.

Redirects 301 de Apache: pri­n­ci­pios básicos

Si solo necesitas redirigir una única URL o un pequeño número de URL, puedes ide­n­ti­fi­car­las fá­ci­l­me­n­te de forma in­di­vi­dual en el archivo de co­n­fi­gu­ra­ción de Apache de tu proyecto.

Re­di­re­c­ción simple de URL

Para una sola re­di­re­c­ción 301, puedes usar la directiva Redirect en el archivo de co­n­fi­gu­ra­ción de Apache. La sintaxis sería la siguiente:

Redirect 301 [alte URL] [neue URL]

La nueva URL también puede ser una URL externa. De este modo, se puede comunicar a los usuarios la pegadiza URL example.com/store, por ejemplo, en lugar de tener que tra­n­s­mi­tir la larga y co­m­pli­ca­da URL de una página de tienda de Amazon. El siguiente ejemplo redirige el tráfico desde example.com/store a dicha página de la tienda de Amazon:

Redirect 301 example.com/store https://www.amazon.com/s?marketplaceID=...

La directiva Redirect de Apache debe incluirse siempre en el bloque de comandos Vi­r­tua­lHo­st del archivo de co­n­fi­gu­ra­ción principal del servidor web. El archivo se encuentra en las si­guie­n­tes ubi­ca­cio­nes por defecto:

  • CentOS: /etc/httpd/conf.d/example.com.conf
  • Ubuntu: /etc/apache2/sites-available/example.com.conf
Nota

La ubicación y el nombre del archivo de co­n­fi­gu­ra­ción de Apache pueden variar en función de cómo tú o tu ad­mi­ni­s­tra­dor del servidor hayáis co­n­fi­gu­ra­do el hosting.

Edita este archivo con un editor de tu elección, por ejemplo, el editor de líneas de comando nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

De­s­plá­za­te por el archivo hasta que en­cue­n­tres el bloque de comandos Vi­r­tua­lHo­st, que tiene, más o menos, este aspecto:

<virtualhost *:80></virtualhost>
ServerName example.com
	<directory " var www example.com html"></directory>
	AllowOverride All

Ahora añade la directiva de re­di­re­c­ción de Apache al bloque de comandos Vi­r­tua­lHo­st. En este proceso, asegúrate de colocar la directiva fuera de los bloques de comandos del di­re­c­to­rio:

<virtualhost *:80></virtualhost>
ServerName example.com
Redirect 301 /blog https://blog.example.com
	<directory " var www example.com html"></directory>
	AllowOverride All

Guarda y cierra el archivo y reinicia Apache para que se apliquen los cambios:

CentOS:

sudo systemctl restart httpd

Ubuntu:

sudo service apache2 restart

Apache: re­di­re­c­ción de un di­re­c­to­rio

También puedes redirigir un su­b­di­re­c­to­rio a tu página actual de la misma manera. Por ejemplo, ima­gi­ne­mos que quieres mover el blog de tu sitio web de un su­b­di­re­c­to­rio('http://example.com/blog') a su propio dominio canónico ('http://blog.example.com'). Las di­re­c­ti­vas para el Redirect de Apache serían las si­guie­n­tes:

Redirect 301 /blog https://blog.example.com

Re­di­re­c­ción de dominios www a dominios sin www

Es bastante común tra­n­s­fe­rir la versión www de una URL a la versión sin www (o viceversa) a través de una línea “Se­r­ve­rA­lias” en el archivo de co­n­fi­gu­ra­ción de Apache. Aunque este enfoque funciona bien desde el punto de vista de los vi­si­ta­n­tes, no se considera la “mejor práctica” desde el punto de vista SEO.

Porque el uso de “Se­r­ve­rA­lias” en lugar de la re­di­re­c­ción 301 conlleva el riesgo de que los co­n­te­ni­dos afectados se ide­n­ti­fi­quen como contenido duplicado. Por norma general, no hay otra di­fe­re­n­cia entre la versión www y la versión sin www de una URL desde el punto de vista SEO. Es im­po­r­ta­n­te que te decantes por una variante.

A co­n­ti­nua­ción, re­di­ri­gi­mos el tráfico de la variante www a la variante sin www. De nuevo, ne­ce­si­ta­mos hacer uso del archivo de co­n­fi­gu­ra­ción principal de Apache, que puedes volver a abrir con el editor de tu elección, por ejemplo, con el editor de líneas de comandos nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Busca la siguiente línea en el bloque de comandos (con el dominio in­di­vi­dual de tu proyecto):

ServerAlias www.example.com

Borra esta línea y de­s­plá­za­te hasta el final del archivo. Añade allí el siguiente bloque de comandos “Vi­r­tua­lHo­st” nuevo:

<virtualhost *:80></virtualhost>
	ServerName www.example.com
	Redirect 301 / https://example.com/

Guarda y cierra el archivo. A co­n­ti­nua­ción, reinicia Apache para que los cambios surtan efecto.

Re­di­re­c­cio­nes complejas de Apache con mod_rewrite

Para re­di­re­c­cio­nes 301 más complejas, el módulo de Apache mod_rewrite es la mejor opción. Este módulo es rápido, flexible y potente, y te ofrece la po­si­bi­li­dad de manipular fá­ci­l­me­n­te las URL. Puedes definir las reglas apro­pia­das en un archivo .htaccess, entre otros.

Activar mod_rewrite en CentOS

El módulo mod_rewrite está activado por defecto en CentOS. Si ves que no está activado, siempre puedes activarlo en el archivo de co­n­fi­gu­ra­ción básico del módulo. Para ello, primero abre el archivo con el editor nano:

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Añade la siguiente línea o actívala si ha sido de­s­co­me­n­ta­da:

LoadModule rewrite_module modules/mod_rewrite.so

En el siguiente paso, activa el uso de archivos .htaccess. Para ello, abre el archivo principal de co­n­fi­gu­ra­ción de Apache.

sudo nano /etc/httpd/conf.d/example.com.conf

De­s­plá­za­te hasta el bloque de comandos principal de Vi­r­tua­lHo­st, que, como ya hemos me­n­cio­na­do, debería tener el siguiente aspecto apro­xi­ma­do:

<virtualhost *:80></virtualhost>
ServerName example.com
	<directory " var www example.com html"></directory>
	AllowOverride None

Cambia la entrada de “Allo­wO­ve­rri­de” de “None” a “All”:

AllowOverride All

Si falta la entrada del di­re­c­to­rio en el bloque de comandos Vi­r­tua­lHo­st, añádela ma­nua­l­me­n­te:

<directory " var www example.com html"></directory>
	AllowOverride All
Nota

Asegúrate de utilizar la ruta correcta del di­re­c­to­rio principal de tu sitio web.

Guarda y cierra el archivo. Reinicia Apache para que los cambios surtan efecto:

sudo systemctl restart httpd

Activar mod_rewrite en Ubuntu

Para activar mod_rewrite en un servidor Ubuntu, utiliza el siguiente comando:

sudo a2enmod rewrite

Reinicia Apache para que los cambios surtan efecto:

sudo service apache2 restart

A co­n­ti­nua­ción, permite el uso de archivos .htaccess. Para ello, edita el archivo principal de co­n­fi­gu­ra­ción de Apache:

sudo nano /etc/apache2/sites-available/example.com.conf

De­s­plá­za­te hasta el bloque de comandos principal de Vi­r­tua­lHo­st y busca el bloque de comandos de di­re­c­to­rio (Directory), que debería tener el siguiente aspecto:

<directory var www example.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted

En la línea “Allo­wO­ve­rri­de” sustituye la entrada por defecto “None” por “All”:

AllowOverride All

Si falta la entrada del di­re­c­to­rio en el bloque de comandos Vi­r­tua­lHo­st, añádela ma­nua­l­me­n­te:

<directory var www example.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted

Guarda y cierra el archivo. Reinicia el servidor web para que los cambios surtan efecto:

sudo service apache2 restart

Crear un archivo .htaccess para la re­di­re­c­ción Apache

Después de haber co­n­fi­gu­ra­do Apache para usar mod_rewrite y permitir archivos .htaccess, es el momento de ir al di­re­c­to­rio de do­cu­me­n­tos (di­re­c­to­rio principal) de tu sitio web y crear un archivo .htaccess.

Nota

No es necesario reiniciar Apache después de realizar cambios en un archivo .htaccess.

Si no has realizado ningún cambio, cambia di­re­c­ta­me­n­te al di­re­c­to­rio principal de tu servidor web Apache con la siguiente entrada:

cd /var/www/html

Ahora crea el archivo .htaccess en el di­re­c­to­rio y ábrelo con el siguiente comando:

sudo nano .htaccess

Es­pe­ci­fi­ca tus co­n­fi­gu­ra­cio­nes in­di­vi­dua­les de mod_rewrite. Comienza con una simple prueba para ase­gu­rar­te de que todo funciona co­rre­c­ta­me­n­te añadiendo las si­guie­n­tes líneas a este archivo:

RewriteEngine on
RewriteRule ^hello.html$ goodbye.html

Esta regla redirige las consultas de hello.html a la página goodbye.html . Guarda y cierra el archivo y luego crea los dos do­cu­me­n­tos HTML con los si­guie­n­tes comandos:

sudo echo "Hello" >> hello.html
sudo echo "Goodbye" >> goodbye.html

Ahora accede a la página hello.html en un navegador. Deberías ser re­di­ri­gi­do a goodbye.html a través del Redirect Apache y, por lo tanto, ver el mensaje “Goodbye”.

Re­di­re­c­cio­nar varios dominios a la misma URL a través de Redirect de Apache

Hay varias razones por las que puedes necesitar re­di­re­c­cio­nar di­fe­re­n­tes dominios a la misma dirección:

  • Si su sitio principal es example.com , puedes cubrir de forma óptima el espacio del nombre comprando example.net y example.org .
  • Tiene sentido registrar también las típicas faltas de or­to­gra­fía de tu nombre de dominio, como exampl.com o exmple.com, e in­clui­r­las en tu es­tra­te­gia. Así también te proteges frente al de­no­mi­na­do ty­po­s­qua­t­ti­ng.
  • También puede ser que hayas adquirido variantes de tu nombre de dominio, como the-example.com o my-example.com, y que desees que los usuarios también acaben llegando a tu proyecto web cuando intentan acceder a estas di­re­c­cio­nes.

Aunque también puedes re­di­re­c­cio­nar estos nombres de dominio a tu página principal de la forma habitual, es aco­n­se­ja­ble desde el punto de vista SEO es­ta­ble­cer re­di­re­c­cio­nes 301 para conseguir los objetivos que te has marcado.

Para re­di­re­c­cio­nar varios dominios al mismo dominio a través de Redirects de Apache, primero activa el módulo mod_rewrite como se describe en la sección anterior y configura un archivo .htaccess adecuado. A co­n­ti­nua­ción, añade las si­guie­n­tes líneas al archivo .htaccess:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]

En el ejemplo, se desvía el tráfico de datos desde example.net a example.com. Ahora si­m­ple­me­n­te adapta esta regla a tus nombres de dominio y a los re­su­l­ta­dos deseados. Por ejemplo, para desviar el tráfico de datos a la versión www de la URL ('www.example.com'), se usaría la siguiente secuencia:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

Apache: desviar páginas HTTP a páginas HTTPS: así se hace

Para la seguridad de tus usuarios y tu cla­si­fi­ca­ción en los motores de búsqueda, es de elemental im­po­r­ta­n­cia que todo el tráfico en tu sitio web esté protegido mediante SSL/TLS. En este caso, también puedes usar un Redirect 301 de Apache, que re­di­re­c­cio­ne au­to­má­ti­ca­me­n­te a los vi­si­ta­n­tes a la versión HTTPS de tus páginas.

En este caso, vuelve a co­n­fi­gu­rar primero mod_rewrite y el archivo .htaccess y luego añade las si­guie­n­tes líneas al archivo de co­n­fi­gu­ra­ción:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com$1 [R=301,L]

Cambiar el nombre de sitios web y desplazar di­re­c­to­rios

Hay si­tua­cio­nes en las que puedes necesitar cambiar el nombre de una página o di­re­c­to­rio existente. Esto in­va­li­da­rá todos los enlaces que dirigen a esa página, lo que no solo empeora la ex­pe­rie­n­cia del usuario, sino que también afecta a tu cla­si­fi­ca­ción SEO.

Utiliza las si­guie­n­tes reglas en el archivo .htaccess (después de haber co­n­fi­gu­ra­do mod_rewrite y el archivo .htaccess).

Cambiar el nombre del sitio web:

RewriteEngine on
RewriteRule ^old-page.html$ /new-page.html [R=301]

Cambiar el nombre del di­re­c­to­rio:

RewriteEngine on
RewriteRule ^old-directory/ /new-directory/ [R=301]

En los ejemplos an­te­rio­res, los nombres de los archivos y di­re­c­to­rios se indican como una ruta relativa al di­re­c­to­rio principal del sitio web. Hay tres opciones para las rutas:

  • una ruta completa de sistema de archivos como /var/wwww/html/new-page.html
  • una ruta web relativa al di­re­c­to­rio principal como /new-page.html
  • una URL absoluta como 'http://example.com/new-page.html'

Resumen de la in­fo­r­ma­ción más im­po­r­ta­n­te sobre mod_rewrite

El módulo mod_rewrite utiliza ex­pre­sio­nes regulares para compensar y re­em­pla­zar varias URL. Para activar mod_rewrite, la primera línea de las reglas en el archivo .htaccess debe tener siempre este aspecto:

RewriteEngine on

El núcleo de mod_rewrite son las Re­w­ri­te­Ru­les. Cada Re­w­ri­te­Ru­le consta de tres partes:

RewriteRule [pattern] [substitution] [flags]

El patrón (pattern) se crea con la ayuda de ex­pre­sio­nes regulares. Se pueden hacer las si­guie­n­tes su­s­ti­tu­cio­nes:

  • una ruta completa de sistema de archivos
  • una ruta web relativa al di­re­c­to­rio principal
  • una URL absoluta

Las banderas son op­cio­na­les. Algunas de las más comunes son las si­guie­n­tes:

  • L: indica que es la última de una serie de reglas
  • R=301: fuerza una re­di­re­c­ción 301
  • NC: ignora las ma­yú­s­cu­las y mi­nú­s­cu­las para que la regla no distinga entre ma­yú­s­cu­las y mi­nú­s­cu­las

Para una lista completa de las banderas di­s­po­ni­bles, consulta el sitio web oficial de Apache.

En algunos casos, una Re­w­ri­te­Ru­le se introduce mediante una Re­w­ri­te­Co­nd. Esta define las co­n­di­cio­nes en las que la Re­w­ri­te­Ru­le tiene efecto. Una Re­w­ri­te­Co­nd también consta de tres partes:

RewriteCond [test string] [condition] [flags]

El string de prueba suele ser una variable del servidor con el formato %{VARIABLE NAME}.

Existen tres tipos de co­n­di­cio­nes (condition):

  • ex­pre­sio­nes regulares
  • co­m­pa­ra­cio­nes de cadenas de ca­ra­c­te­res
  • pruebas de archivos/rutas

Las banderas vuelven a ser op­cio­na­les. Hay tres banderas di­s­po­ni­bles para la Re­w­ri­te­Co­nd:

  • NC: ignora las ma­yú­s­cu­las y mi­nú­s­cu­las para que la condición no distinga entre ma­yú­s­cu­las y mi­nú­s­cu­las
  • OR: “o” lógico
  • NV (“No Vary”): el nombre de la cabecera no se inserta en la cabecera de respuesta Vary

¿Cuál es la di­fe­re­n­cia entre Re­w­ri­te­Ru­le y Redirect?

Tanto Re­w­ri­te­Ru­le como Redirect 301 de Apache pueden marcarse en un archivo .htaccess para redirigir el tráfico del sitio web. La principal di­fe­re­n­cia es que una Re­w­ri­te­Ru­le se im­ple­me­n­ta mediante el módulo mod_rewrite y un Redirect, mediante el módulo mod_alias.

mod_rewrite mod_alias
Usa Re­w­ri­te­Ru­le y Re­w­ri­te­Co­nd Usa Redirect y Re­di­re­c­t­Ma­t­ch
Es muy versátil, ya que utiliza ex­pre­sio­nes regulares para compensar y re­em­pla­zar varias URL No es tan co­n­fi­gu­ra­ble
Puede ser difícil de manejar Fácil de manejar
Puede no estar instalado o activado por defecto Ya suele estar activado por defecto en la mayoría de las in­s­ta­la­cio­nes de Apache
Ir al menú principal