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.
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
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.
Hola, gracias por la informacion, me sirvio de mucho para redirigir un dominio entero
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
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.
Muchas gracias por el artículo, me resultó de gran utilidad para mi sitio web porque modifique la estructura de las URL’s del mismo
Muchas gracias, ahora si he podido redireccionar mis entradas correctamente.
Slds.
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 subcarpetaportal
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 aparezcaejemplo.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.
Hola Fernando, para lo que dices deberías montar tu dominio directamente apuntando a ejemplo.com/portal y no a ejemplo.com
Saludos.
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.
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.
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!!
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.
Hola Darío, felicidades por este magnífico artículo, hace un par de meses que trasladé mi antiguo dominio «.com» a otro nuevo «.es», utilizando en el fichero htaccess la redirección que indicas:
redirectMatch 301 ^(.*)$ https://www.dariobf.com$1
La cual me ha funcionado perfectamente, el problema es que he cambiado a un servidor Nginx en los cuales no se lee el archivo htaccess, ¿sabes que redirección podría utilizar en este tipo de servidores?
Muchas gracias
Hola Juan, ni idea sobre cómo aplicarlo en nginx, lo siento.