Redirecciones 301 con .htaccess

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]

6 pensamientos en “Redirecciones 301 con .htaccess”

  1. Hola
    Soy peruano y buscando experiencias con empresas de servidores dedicados llegué a tu portal y me parece importante para mis intereses lo escrito en tu post. Mira estoy creando un negocio para poder brindar servicio de hosting y reseller en el Perú y quiero que el servicio sea satisfactorio para mis clientes es por eso que te pregunto, de acuerdo a tu experiencia con qué proveedor o proveedores me recomendarías trabajar? Espero que me puedas ayudar en este tema para poder decidirme por una empresa seria y con un soporte seguro. Desde ya te doy las gracias por tus recomendaciones.
    Saludos.
    Fernando.

  2. Estimado Javier:
    Estoy teniendo problemas con los redireccionamientos 301 para añadir las www. a la url, puede ser un problema del servidor apache la versión que tiene pues yo hago todo estos pasos y no me da resultado y ya he probado varias lineas de código.

    Gracias y un saludo.

  3. Hola, muchas gracias de antemano por su ayuda, su artículo me ha sido de mucha utilidad pero todavía tengo un duda.

    Tengo un alojamiento y 3 nombres de dominio, un principal miweb.com y otros dos miweb.net, miweb.es

    La cuestión es que quiero redirigir esos dos dominios al principal, y con la redirección 301 en el .htaccess lo he conseguido tanto para el dominio con www como sin.

    El problema viene en direcciones como por ejemplo miweb.es/pagina-prueba que al escribirla en el navegador no me redirecciona automáticamente a miweb.com/pagina-prueba

    Este es el .htaccess que estoy usando:

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    RewriteCond %{HTTP_HOST} ^www.miweb.es$ [NC]
    RewriteRule ^(.*)$ http://www.miweb.com/ [R=301,L]
    RewriteCond %{HTTP_HOST} ^miweb.es$ [NC]
    RewriteRule ^(.*)$ http://www.miweb.com/ [R=301,L]

    RewriteCond %{HTTP_HOST} ^www.miweb.net$ [NC]
    RewriteRule ^(.*)$ http://www.miweb.com/ [R=301,L]
    RewriteCond %{HTTP_HOST} ^miweb.net$ [NC]
    RewriteRule ^(.*)$ http://www.miweb.com/ [R=301,L]

    # END WordPress

    Espero puedan ayudarme y cualquier duda consúltenme

    Un saludo :))

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>