Cómo crear redirecciones de Apache con htaccess

GuíasApacheAplicacionesServidoresTipos de aplicación

Iré publicando una serie de artículos acerca del archivo .htaccess. Este archivo es el archivo de configuración básico del servidor web Apache, aplicable a todos los directorios y subdirectorios donde se encuentre este archivo, es decir, que si un directorio padre contiene este archivo, la configuración se aplicará a todos los directorios hijos a menos que exista otro archivo .htaccess en uno de estos directorios hijos. De este modo podemos podemos tener varias webs en distintas carpetas y don distintas configuraciones en un mismo servidor.

Las posibilidades de este archivo son tremendas, pudiendo hacer desde cosas básicas como redirecciones hasta auténticas artimañas gracias al uso de expresiones regulares, pudiendo reescribir las URLs de nuestras páginas a nuestro antojo. Comenzaremos con algo básico como son las redirecciones, así que tranquilos, que en este caso no corréis el riesgo de estropear nada.

Por qué querríamos crear una redirección

Imaginemos que por ejemplo tenemos un blog en wordpress cuya página de login se encuentra en mi-web.com/wp-login.php. Quizás estemos acostumbrados a Drupal, cuya página de login se encuentra en mi-web.com/user y puede que te pase como a mi, que has escrito infinidad de veces mi-web.com/user en wordpress al hacer login por estar acostumbrado a Drupal. Pues sería interesante redirecionar mi-web.com/user a mi-web.com/wp-login.php.

También puede que queramos redireccionar una URL a otra, es decir, de mi-web.com/url1mi-web.com/url2. Podemos hacer todo esto desde PHP pero es infinitamente más eficiente hacerle desde este archivo, antes de que se ejecute código PHP, minimizando el tiempo de respuesta y dejando que la caché de nuestra web (en caso de tenerla activa) haga su trabajo del mejor modo.

Cómo activar las redirecciones

Antes de comenzar, debemos activar las directivas de redireccionamiento con la siguiente línea que debe ir antes de cualquier redirección:

<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>

Cómo crear redirecciones

Abrimos el archivo .htaccess que encontraremos en el directorio raíz de nuestra web. Para el primer caso anteriormente explicado,podemos escribir la siguiente redirección:

Redirect 302 /user /wp-login.php

Para el segundo caso, podemos crear esta redirección.

Redirect 301 /url2 /url1

Es decir, que primero va la URL destino y luego la origen. En este caso son URLs relativas a nuestra web, de ahí que no ponga el nombre de la página. Por supuesto, es posible redireccionar de una web a otra con por ejemplo:

Redirect 301 miotraweb.com/url2 /url1

Tipos de redirección

¿Y qué significan los números 302 y 301 de las URLs anteriores?

Pues se trata sencillamente del tipo de redirección que queremos realizar, siendo 302 una redircción temporal y 301 una permanente que, aunque para nosotros es lo mismo, no lo es así para google. Si hacemos una redirección 302, los motores de búsqueda no almacenarán esta redirección puesto que estamos indicando que se trata de algo temporal (imaginad por ejemplo que por lo que sea, cambiamos el dominio de toda nuestra web temporalmente). Mediante la redirección 301 le decimos a los motores de búsqueda que es algo permanente, por lo que almacenarán dicha redirección, muy útil si cambiamos el dominio de nuestra web permanentemente y no queremos perder posiciones.

Cómo redireccionar las URLs (con/sin) www

Otro caso típico es el de redireccionar nuestra web sin www a nuestra web con la www. Para los motores de búsqueda (al menos para Google) miweb.com y www.miweb.com son vistas como distintas webs, por lo que interpretarán dichas URLs como distintas webs y por lo tanto, el contenido será visto como contenido duplicado, haciéndonos perder posiciones. He aquí un ejemplo de cómo configurar este archivo para que nuestra web sea accesible solamente con www o solamente sin www. La decisión de cual de las dos formas hacerlo es vuestra, puesto que es indiferente para los motores de búsqueda, se trata solamente de una cuestión de estética.

Decir que los comentarios en este archivo se indican con el símbolo # al principio de cada línea, por lo que podéis copiar y pegar lo siguiente en vuestro archivo con tranquilidad puesto que los comentarios no son tenidos en cuenta y son solamente eso, comentarios.

Redirigir a la versión con www de nuestra web

Para redirigir siempre a la versión de la web CON el prefijo www.:

# Elimina el comentario de la siguiente línea si aún no has activado la directiva de redireccionamiento
# RewriteEngine on
# (http://ejemplo.com/... será redireccionado a http://www.ejemplo.com/...)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

{HTTP_HOST} representa al nombre de nuestra web y {REQUEST_URI} a la URL. Poned [L,R=301], pues que si solamente ponemos [L=301], estaremos diciendo que se trata de la última redirección y que el resto de las existentes en el archivo no sean tenidas en cuenta.

Redirigir a la versión sin www de nuestra web

Para redirigir siempre a la la versión de la web SIN el prefijo www.:

# Elimina el comentario de la siguiente línea si aún no has activado la directiva de redireccionamiento
# RewriteEngine on
# (http://www.ejemplo.com/... será redireccionado a http://ejemplo.com/...)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

{HTTP_HOST} representa al nombre de nuestra web y {REQUEST_URI} a la URL. Poned [L,R=301], pues que si solamente ponemos [L=301], estaremos diciendo que se trata de la última redirección y que el resto de las existentes en el archivo no sean tenidas en cuenta.

Redirigir a la versión segura de nuestra web

Para redireccionar todas las páginas a la versión segura, debemos tener un certificado SSL válido instalado. Si este es el caso, basta con que escribamos las siguientes reglas:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.mi-web.com/$1 [R,L]

También te puede interesar: Cómo habilitar el módulo rewrite de Apache en Wamp y Xampp

1 comentario en “Cómo crear redirecciones de Apache con htaccess

  1. Como rediriges todo el sitio a una página de mantenimiento?
    He probado cosas como:
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !/mant.php$ [NC]
    RewriteRule ^(.*) /mant.php [L,R=302]
    Pero sólo funciona en la raíz (ejem: http://www.dominio.com/*), si entro por un directorio (ejem; http://www.dominio.com/ayuda/) me manda a un error ERROR 404 – PAGE NOT FOUND.
    O tengo que copiar el .htaccess en todos los directorios y subderectorios que tenga?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *