Redirección 301 con .htaccess


A veces decidimos, por diversas razones, trasladar nuestro sitio web de url; bien porque cambiamos de dominio bien porque queremos poner el blog en un subdominio para colocar una página web en el raíz del sitio.

Si nuestro posicionamiento web es regular o no nos importa perderlo y empezar de cero, esto lo haríamos sin mayor complicación que mover el blog de sitio y esperar que google lo indexe de nuevo.

Ahora bien, si tenemos un buen posicionamiento, a nadie le gusta perderlo tras tantas horas de trabajo.

Para no perder nada de lo ya logrado en lo que a posicionamiento en buscadores o enlaces entrantes se refiere, se suele hacer una redirección 301. Nosotros vamos a hacer la redirección 301 con .htaccess.

Conociendo el fichero .htaccess

Para quien no lo sepa, el fichero .htaccess, como cualquier fichero que comienza con punto en linux, es un fichero oculto que contiene directivas para el servidor. Con él podemos, entre otras cosas, restringir el acceso a determinados archivos, impedir el listado de un directorio, redireccionar (Era obvio, ¿no?), personalizar las páginas de error (404, 505...) o impedir el acceso a determinadas IPs o rangos de IP (malditos bots de spam).

Redirección 301 con .htaccess

Una vez que sabemos un poquito de qué se trata el fichero .htaccess vamos a ver cómo hacer la redirección.

Podríamos decir, de manera muy simple, que htaccess funciona con "comandos".

El que vamos a utilizar nosotros es el redirect; más concretamente el redirect 301.

Una redirección simple (de una sola URL) se puede hacer con una línea como esta:
redirect 301 /url_antigua.html http://www.dominio-nuevo.com/url-nueva/

Pero eso nos serviría sólo para una url única; es decir, si nuestro sitio es un blog, sólo podríamos redireccionar el index.

También podemos hacer redirecciones masivas de cualquier URL de un dominio hacia un nuevo dominio:
redirectMatch 301 ^(.*)$ https://www.dariobf.com

Si colocamos la linea en un fichero .htaccess y lo insertamos en el raiz de un sitio web, cualquier url que pertenezca a ese dominio (al vinculado con ese alojamiento) redireccionará a Katharsix.

Esto es útil cuando, por ejemplo, ponemos un sitio en mantenimiento y no queremos mostrar otra cosa que no sea la página "en construcción" (cosa que, personalmente, no me gusta demasiado).

Pero nuestro cometido en esta entrada es clonar la URL hacia una nueva ruta (o dominio), por lo que lo deberíamos hacer con la siguiente instrucción:
redirectMatch 301 ^(.*)$ https://www.dariobf.com$1

Esto conseguirá que cualquier url del dominio actual sea redireccionada a la misma en el dominio especificado (en este caso katharsix). Por ejemplo: Supongamos que tenemos el dominio www.dominioantiguo.com y queremos que cualquier ruta de él, como ejemplo pondremos www.dominioantiguo.com/ruta_vieja, redireccione al dominio nuevo con la misma ruta; en este caso www.dariobf.com/ruta_vieja.

Con esta última instrucción logramos una redirección completa del sitio hacia una ruta nueva, de manera que podemos mudar nuestro dominio sin perder posicionamiento o enlaces entrantes ya que, google (para el posicionamiento) detectará la redirección y actualizará sus registros hacia nuestra nueva ruta y los enlaces entrantes estarán automáticamente redireccionados hacia nuestro nuevo dominio.

13 comentarios en “Redirección 301 con .htaccess

  1. Hola, estoy usando Wordpress como CMS para un sitio de noticias culturales y tengo el sgte problema, heredado, por cierto. El asunto es ke tengo los buscadores asumen como 2 sitios diferentes las sgtes urls, http://www.cadenahabana.cu y cadenahabana.cu. Puedes sugerirme como resolver esto, usando 301 Redirects?
    Gracias,
    Alex

    1. Hola Alex.
      He probado la url que me mandas y realmente SI son dos webs diferentes... Me explico: si entras en dicha url con www verás un portal mientras que sin ellas verás una página en rojo.

      La manera que se me ocurre de solucionar esto es mandar a la web sin www redireccionada a la que realmente tiene www.

      Para conseguir esto puedes usar la siguiente instrucción en tu .htaccess:
      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} !^www.tudominio.com$ [NC]
      RewriteRule ^(.*)$ http://www.tudominio.com/$1 [L,R=301]

      Lo que hacemos ahí es activar el rewriteengine de apache y decirle que lo aplique al raiz del sitio con las condiciones especificadas.

      Espero que te sirva. Un saludo.

  2. Hola, quisiera saber si puede especificarse este redireccionamiento para ciertos IP. Quiero que usuarios de unos países vayan a un sitio específico para ellos.
    Gracias

    1. Hola perla,
      Seguro que es posible eso que quieres; deberías capturar la ip del visitante y (a nivel de programación) realizar la redirección. Yo nunca he hecho nada similar, siento no poder ayudarte más.

      Un saludo.

  3. Hola, quisiera pedirte ayuda en algo que no he podido lograr para el sitio web de mi empresa personal.

    Tengo un dominio, que ?para evitar spam? llamaré ejemplo.com . Instalé un sitio WordPress dentro de la subcarpeta portal y deseo que cada vez que un usuario o un robot de indexación entre a:

    1. ejemplo.com
    2. www.ejemplo.com
    3. ejemplo.com/portal
    4. www.ejemplo.com/portal

    automáticamente redireccione a ejemplo.com/portal , pero que en la barra de direcciones aparezca ejemplo.com .

    Dejo una copia de lo que he logrado. Por el momento, he logrado resolver las direcciones 1 y 2, pero no las otras dos. En el caso de la 4, se redirecciona a ejemplo.com/portal .


    RewriteCond %{HTTP_HOST} ^ejemplo\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^ejemplo\.com/portal$ [OR]
    RewriteCond %{HTTP_HOST} ^ejemplo\.org$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.ejemplo\.com$
    RewriteCond %{REQUEST_URI} !^/portal/
    RewriteRule (.*) /portal/$1

    Incluyo la línea del .org porque también soy propietario de ese dominio. Es el dominio que emplearé posteriormente para labores sociales de mi empresa, con un sitio web diferente. Me preocupa mucho el tema de datos duplicados porque podría resultar sancionado por Google.

    Agradecería tu ayuda. Quedo atento a cualquier respuesta por correo electrónico y estaré pendiente de esta entrada, en caso de respuesta por este medio.

    Gracias por tu atención.

      1. Hola, Darío. Gracias por tu respuesta. Quisiera que me colaboraras extendiéndola, pues recién comienzo con estas labores y, aunque he avanzado más de lo que planeaba, aún me tropiezo de vez en cuando.

        Manejo múltiples dominios con un mismo hosting y con esa configuración que te mostré he tenido muchos inconvenientes. Por ejemplo, cada vez que voy a instalar WordPress en una subcarpeta, al intentar entrar me lleva a un 403 del dominio principal, no a la nueva instalación. Lo que he hecho es copiar el .htaccess de una instalación existente a la nueva carpeta de instalación y luego configuro el dominio desde WordPress. No sé si me explico bien...

        Creo que estoy haciendo algo mal, pero la verdad he aprendido estas cosas a punta de ensayo y error, documentando mis fallas y éxitos para futuros avances.

        Te agradecería cualquier aporte. Quedo atento.

        De nuevo, gracias.

        1. En el caso anterior, lo que hacemos es que todas las solicitudes realizadas al servidor correspondientes al dominio "losfosiles.es" sea redireccionada a la misma petición en el dominio "losfosilesrock.es"; sea cual sea la solicitud.

  4. buen post,
    pero me queda una duda...

    voy a trasladar mi sitio web de hosting y además le voy a cambiar el dominio, en este caso el htaccess ¿como se confugura? mi idea es que por ejm. la pagina "http://www.losfosiles.es/musica.html" se redirija al nuevo host con la misma url pero con el nuevo dominio, es decir, el mismo contenido en "http://www.losfosilesrock.es/musica.html"

    espero haberme explicado.
    Igual la solución está en el post! pero no lo veo...
    Gracias!!

    1. Hola, en ese caso tienes que agregar lo siguiente en tu .htaccess
      <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^losfosiles.es$ [OR]
      RewriteCond %{HTTP_HOST} ^www.losfosiles.es$
      RewriteRule (.*)$ http://www.losfosilesrock.es/$1 [R=301,L]
      </ifmodule>

      De esta manera, todas las url del dominio anterior redireccionarán al nuevo.

      Saludos.

Deja una respuesta

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

*

*

DARÍO BALBONTÍN FERNÁNDEZ es el Responsable del tratamiento de los datos personales del usuario y le informa que estos datos serán tratados de conformidad con lo dispuesto en el Reglamento (UE) 2016/679 de 27 de abril (GDPR) y la Ley Orgánica 3/2018 de 5 de diciembre (LOPDGDD), por lo que se le facilita la siguiente información del tratamiento: Fin del tratamiento: mantener una relación comercial y el envío de comunicaciones sobre nuestros productos y servicios. Criterios de conservación de los datos: se conservarán mientras exista un interés mutuo para mantener el fin del tratamiento y cuando ya no sea necesario para tal fin, se suprimirán con medidas de seguridad adecuadas para garantizar la seudonimización de los datos o la destrucción total de los mismos.Comunicación de los datos: No se comunicarán los datos a terceros, salvo obligación legal. Derechos que asisten al usuario: Derecho a retirar el consentimiento en cualquier momento. Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al su tratamiento. Derecho a presentar una reclamación ante la Autoridad de control (agpd.es) si considera que el tratamiento no se ajusta a la normativa vigente. Datos de contacto para ejercer sus derechos: contacto@dariobf.com.

¡Únete ya a BFLabs GRATIS! Estreno próximamente... Más información