En servidores apache, un fichero llamado “.htacess” le indica al demonio httpd las directivas que tiene que seguir en el directorio donde se encuentra el fichero. En este artículo voy a hablar muy por encima de una de las aplicaciones más prácticas del fichero .htaccess, las redirecciones 301 o redirecciones permanentes.


La redirección 301 más básica constaría de la siguiente sentencia:

redirect 301 /url-antigua/ http://www.nuevodominio.com/url-nueva/

La URL antigua se indica de forma relativa al archivo .htaccess (o al httpd.conf) y la nueva evidentemente se indica de forma absoluta empezando por con http://.


También tenemos la posibilidad de redireccionar en masa utilizando patrones y condiciones. Por ejemplo, podemos redirigir cualquier URL de un dominio a otro:

redirectMatch 301 ^(.*)$ http://www.javierlorente.es/

Eso redireccionaría cualquier URL como http://dominioantiguo.com/cualquier-cosa/ a la URL http://www.javierlorente.es/.


También podemos redirigir una URL de un dominio a la misma URL en otro dominio:

redirectMatch 301 ^(.*)$ http://www.javierlorente.es/$1

Eso redireccionaría cualquier URL como http://dominioantiguo.com/cualquier-cosa/ a la URL http://www.javierlorente.es/cualquier-cosa/.


Si queremos optimizar un poco la carga de nuestro servidor y tenemos acceso al fichero httpd.conf (en VPS o servidores dedicados, por ejemplo), mi consejo es que le enchufemos estas directivas directamente al fichero httpd.conf y que le indiquemos que no busque los ficheros .htaccess recursivamente en cada directorio que lea, ahorraremos algunas milésimas de segundo.

Por último, lo anteriormente expuesto son las formas de redirecciones más básicas pero lo cierto es que el mod rewrite de Apache soporta reglas o condiciones por lo que podemos crear redirecciones dinámicas a traves de URLs iniciales. Tenéis más información sobre redirecciones complejas en estas dos urls:

Espero que os haya servido de ayuda 😉

Actualización: Gracias a Ani López he encontrado esta fantástica guía de introducción al URL Rewriting

Actualización 2: Para redirigir un dominio sin www a con www ponemos el siguiente código en el htaccess.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Para hacer lo contrario, para eliminar las www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^my-domain.com$ [NC]
RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]