# Redirects con Apache: instrucciones de Redirect para CentOS y Ubuntu

Las redirecciones o desvíos de Apache son útiles en muchas situaciones. Entre otras cosas, puedes utilizar los prácticos Redirects **para** dirigir a los visitantes 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 directorios. Te ayudamos a entender y configurar las redirecciones de Apache en CentOS y Ubuntu.

## Redirect 301 o 302: ¿Cuál es la diferencia?

Al analizar las redirecciones o desvíos, es importante distinguir entre Redirects 301 y 302. El primer código de estado (301) representa un **desvío** **permanente**, mientras que el segundo (302) indica un **desvío temporal**.

Una redirección 301 es mucho más apetecible desde la perspectiva del SEO. Si un [rastreador de motor de búsqueda](https://www.ionos.es/digitalguide/online-marketing/marketing-para-motores-de-busqueda/que-es-un-web-crawler/ "¿Qué es un web crawler?") se encuentra con un Redirect de este tipo, entiende que se trata de un desvío permanente. Por esta razón, no solo toma nota de la nueva URL, sino que también inicia el proceso de transferencia de cualquier **valor de Page Rank** de la antigua a la nueva URL, por tanto, **la clasificación SEO ya alcanzada** se mantiene.

Si, por el contrario, un rastreador detecta una redirección 302, anota la nueva dirección y sigue adelante. Dependiendo del rastreador, 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, especifica siempre que se trata de un Redirect 301. En muchas situaciones, se usa el Redirect 302 por defecto si no se especifica el tipo de redirección.

---

## Redirects 301 de Apache: principios básicos

Si solo necesitas **redirigir** **una única URL** o un **pequeño número de URL**, puedes identificarlas fácilmente de forma individual en el archivo de configuración de Apache de tu proyecto.

### Redirección simple de URL

Para una **sola** **redirección 301**, puedes usar la directiva Redirect en el archivo de configuración de Apache. La sintaxis sería la siguiente:

```none
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 transmitir la larga y complicada 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**:

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

La directiva Redirect de Apache debe incluirse siempre en el **bloque de comandos VirtualHost** del archivo de configuración principal del servidor web. El archivo se encuentra en las siguientes ubicaciones 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 configuración de Apache pueden variar en función de cómo tú o tu administrador del servidor hayáis configurado el hosting.

---

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

**CentOS:**

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

**Ubuntu:**

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

Desplázate por el archivo hasta que encuentres el bloque de comandos VirtualHost, que tiene, más o menos, este aspecto:

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

Ahora añade la directiva de redirección de Apache al bloque de comandos VirtualHost. En este proceso, asegúrate de colocar la directiva fuera de los bloques de comandos del directorio:

```none
<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:**

```none
sudo systemctl restart httpd
```

**Ubuntu:**

```none
sudo service apache2 restart
```

### Apache: redirección de un directorio

También puedes **redirigir un** **subdirectorio** a tu página actual de la misma manera. Por ejemplo, imaginemos que quieres mover el blog de tu sitio web de un subdirectorio*('http://example.com/blog'*) a su propio dominio canónico *('http://blog.example.com'*). Las directivas para el Redirect de Apache serían las siguientes:

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

### Redirección de dominios www a dominios sin www

Es bastante común transferir la versión www de una URL a la versión sin www (o viceversa) a través de una línea **“ServerAlias”** en el archivo de configuración de Apache. Aunque este enfoque funciona bien desde el punto de vista de los visitantes, no se considera la “mejor práctica” desde el punto de vista SEO.

Porque el uso de “ServerAlias” en lugar de la redirección 301 conlleva el riesgo de que los contenidos afectados se identifiquen como [contenido duplicado](https://www.ionos.es/digitalguide/online-marketing/marketing-para-motores-de-busqueda/contenido-duplicado/ "Contenido duplicado"). Por norma general, no hay otra diferencia entre la versión www y la versión sin www de una URL desde el punto de vista SEO. Es importante que te decantes por una variante.

A continuación, **redirigimos** el **tráfico de la variante www a la variante sin www**. De nuevo, necesitamos hacer uso del archivo de configuració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:**

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

**Ubuntu:**

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

Busca la siguiente línea en el bloque de comandos (con el dominio individual de tu proyecto):

```none
ServerAlias www.example.com
```

Borra esta línea y desplázate hasta el final del archivo. Añade allí el siguiente bloque de comandos “VirtualHost” nuevo:

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

Guarda y cierra el archivo. A continuación, reinicia Apache para que los cambios surtan efecto.

## Redirecciones complejas de Apache con mod\_rewrite

Para redirecciones 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 posibilidad de **manipular fácilmente las URL**. Puedes definir las reglas apropiadas en un [archivo .htaccess](https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/los-mejores-trucos-para-archivos-htaccess/ "Los mejores trucos para archivos .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 configuración básico del módulo. Para ello, primero abre el archivo con el editor nano:

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

Añade la siguiente línea o actívala si ha sido descomentada:

```none
LoadModule rewrite_module modules/mod_rewrite.so
```

En el siguiente paso, activa el uso de archivos .htaccess. Para ello, abre el archivo principal de configuración de Apache.

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

Desplázate hasta el bloque de comandos principal de VirtualHost, que, como ya hemos mencionado, debería tener el siguiente aspecto aproximado:

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

Cambia la entrada de “AllowOverride” de “None” a **“All”**:

```none
AllowOverride All
```

Si falta la entrada del directorio en el bloque de comandos VirtualHost, añádela manualmente:

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

---

### Nota

Asegúrate de utilizar la ruta correcta del directorio principal de tu sitio web.

---

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

```none
sudo systemctl restart httpd
```

### Activar mod\_rewrite en Ubuntu

Para activar mod\_rewrite en un servidor Ubuntu, utiliza el siguiente comando:

```none
sudo a2enmod rewrite
```

Reinicia Apache para que los cambios surtan efecto:

```none
sudo service apache2 restart
```

A continuación, permite el uso de archivos .htaccess. Para ello, edita el archivo principal de configuración de Apache:

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

Desplázate hasta el bloque de comandos principal de VirtualHost y busca el bloque de comandos de directorio (Directory), que debería tener el siguiente aspecto:

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

En la línea “AllowOverride” sustituye la entrada por defecto “None” por **“All”**:

```none
AllowOverride All
```

Si falta la entrada del directorio en el bloque de comandos VirtualHost, añádela manualmente:

```none
<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:

```none
sudo service apache2 restart
```

### Crear un archivo .htaccess para la redirección Apache

Después de haber configurado Apache para usar mod\_rewrite y permitir archivos .htaccess, es el momento de ir al directorio de documentos (directorio 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 directamente al directorio principal de tu servidor web Apache con la siguiente entrada:

```none
cd /var/www/html
```

Ahora **crea** el **archivo .htaccess** en el directorio y ábrelo con el siguiente comando:

```none
sudo nano .htaccess
```

Especifica tus **configuraciones individuales de mod\_rewrite**. Comienza con una simple prueba para asegurarte de que todo funciona correctamente añadiendo las siguientes líneas a este archivo:

```none
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 documentos HTML con los siguientes comandos:

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

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

## Redireccionar varios dominios a la misma URL a través de Redirect de Apache

Hay varias razones por las que puedes necesitar redireccionar diferentes 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 ortografía de** **tu nombre de dominio**, como *exampl.com* o *exmple.com*, e incluirlas en tu estrategia. Así también te proteges frente al denominado [typosquatting](https://www.ionos.es/digitalguide/dominios/consejos-sobre-dominios/protege-tu-dominio-del-typosquatting/).
- 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 direcciones.

Aunque también puedes redireccionar estos nombres de dominio a tu página principal de la forma habitual, es aconsejable desde el punto de vista SEO establecer redirecciones 301 para conseguir los objetivos que te has marcado.

Para **redireccionar 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 continuación, añade las siguientes líneas al archivo .htaccess:

```none
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 simplemente adapta esta regla a tus nombres de dominio y a los resultados 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:

```none
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 clasificación en los motores de búsqueda, es de elemental importancia que todo el tráfico en tu [sitio web esté protegido mediante SSL/TLS](https://www.ionos.es/digitalguide/paginas-web/creacion-de-paginas-web/certificados-ssl-y-https-maxima-seguridad-para-tu-web/ "Certificados SSL y HTTPS: máxima seguridad para tu web"). En este caso, también puedes usar un Redirect 301 de Apache, que redireccione automáticamente a los visitantes a la versión HTTPS de tus páginas.

En este caso, vuelve a configurar primero mod\_rewrite y el archivo .htaccess y luego añade las siguientes líneas al archivo de configuración:

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

## Cambiar el nombre de sitios web y desplazar directorios

Hay situaciones en las que puedes necesitar **cambiar el nombre de** una **página** o **directorio** **existente**. Esto invalidará todos los enlaces que dirigen a esa página, lo que no solo empeora la experiencia del usuario, sino que también afecta a tu clasificación SEO.

Utiliza las siguientes reglas en el archivo .htaccess (después de haber configurado mod\_rewrite y el archivo .htaccess).

**Cambiar el nombre del sitio web:**

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

**Cambiar el nombre del directorio:**

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

En los ejemplos anteriores, los nombres de los archivos y directorios se indican como una ruta relativa al directorio 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 directorio principal como /new-page.html
- una **URL absoluta** como 'http://example.com/new-page.html'

## Resumen de la información más importante sobre mod\_rewrite

El módulo mod\_rewrite **utiliza expresiones regulares** para compensar y reemplazar varias URL. Para activar mod\_rewrite, la primera línea de las reglas en el archivo .htaccess debe tener siempre este aspecto:

```none
RewriteEngine on
```

El **núcleo de** mod\_rewrite son las **RewriteRules**. Cada RewriteRule consta de tres partes:

```none
RewriteRule [pattern] [substitution] [flags]
```

El **patrón** (pattern) se crea con la ayuda de expresiones regulares. Se pueden hacer las siguientes sustituciones:

- una ruta completa de sistema de archivos
- una ruta web relativa al directorio principal
- una URL absoluta

**Las banderas** son opcionales. Algunas de las más comunes son las siguientes:

- L: indica que es la última de una serie de reglas
- R=301: fuerza una redirección 301
- NC: ignora las mayúsculas y minúsculas para que la regla no distinga entre mayúsculas y minúsculas

Para una lista completa de las banderas disponibles, consulta el [sitio web oficial de Apache](https://httpd.apache.org/docs/current/rewrite/flags.html "Apache: RewriteRule-Flags").

En algunos casos, una RewriteRule se **introduce mediante una RewriteCond**. Esta define las condiciones en las que la RewriteRule tiene efecto. Una RewriteCond también consta de tres partes:

```none
RewriteCond [test string] [condition] [flags]
```

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

Existen tres tipos de **condiciones** (condition):

- expresiones regulares
- comparaciones de cadenas de caracteres
- pruebas de archivos/rutas

**Las banderas** vuelven a ser opcionales. Hay tres banderas disponibles para la RewriteCond:

- NC: ignora las mayúsculas y minúsculas para que la condición no distinga entre mayúsculas y minúsculas
- 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 diferencia entre RewriteRule y Redirect?

Tanto RewriteRule como Redirect 301 de Apache pueden marcarse en un archivo .htaccess para redirigir el tráfico del sitio web. La principal diferencia es que una RewriteRule se implementa mediante el módulo mod\_rewrite y un Redirect, mediante el módulo mod\_alias.

<table>
  <thead>
    <tr>
      <th>mod\_rewrite</th>
      <th>mod\_alias</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Usa RewriteRule y RewriteCond</td>
      <td>Usa Redirect y RedirectMatch</td>
    </tr>
    <tr>
      <td>Es muy versátil, ya que utiliza expresiones regulares para compensar y reemplazar varias URL</td>
      <td>No es tan configurable</td>
    </tr>
    <tr>
      <td>Puede ser difícil de manejar</td>
      <td>Fácil de manejar</td>
    </tr>
    <tr>
      <td>Puede no estar instalado o activado por defecto</td>
      <td>Ya suele estar activado por defecto en la mayoría de las instalaciones de Apache</td>
    </tr>
  </tbody>
</table>


This is a markdown version of: [https://www.ionos.es/digitalguide/servidores/configuracion/redirects-de-apache/](https://www.ionos.es/digitalguide/servidores/configuracion/redirects-de-apache/) for AI/LLM consumption.