El fichero .htaccess permite redireccionar unas URLs a otras URLs, de modo que si un buscador ha enlazado alguna página que no existe, bien porque la has borrado, o bien porque le has cambiado el slug.
En el caso de que hayas cambiado de dominio, también podrás redireccionar todas las peticiones del dominio antiguo al nuevo dominio.
Redirecciones en el fichero .htaccess
A continuación vamos a comentar distintos tipos de redirecciones.
Está enfocado al uso de WordPress, pero se puede utilizar para cualquier sitio web siempre y cuando el servidor web sea Apache.
Para redireccionar todo el contenido de un dominio a otro distinto, necesitamos hacer una redirección 301 (indica que el contenido se ha movido permanentemente).
Redirect 301 / http://nuevo_dominio.com/
Si el cambio no es definitivo, sino que es temporal, se hace con un 302 (redireccionamiento temporal).
Si no se indica el código, por defecto hace una redirección temporal (302).
Redirect / http://nuevo_dominio.com/
Vamos a redireccionar una url a otra similar.
Imagina que acabas de cambiar el nombre de las etiquetas base tag por etiqueta. Para redirigir todas las url de las etiquetas tienes que crear un redirect 301.
Redirect 301 /tag /etiqueta
Ahora supongamos que queremos redirigir las url canónicas de las categorías, de dominio.com/category/nombre_categoría a dominio.com/nombre_categoria.
RedirectMatch 301 /category/(.*)$ /$1
Bien, en el caso de querer quitar el .html de las URLs, debes utilizar el mod_rewrite.
Con esto consigues que al usuario se le muestre la URL sin la extensión .html, pero a la hora de buscar el fichero en el servidor lo hará con la extensión.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.html[?\ ]
RewriteRule (.*)\.html$ /$1 [R=301,L]
Si además de quitar el .html para todas las URLs, quieres quitar el index.html, puedes añadir detrás del código anterior el siguiente código:
RewriteCond %{REQUEST_URI} ^(.*/)index$ [NC]
RewriteRule . %1 [R=301,NE,L]
De esta forma en la primera parte se quitará de la URL el .html quedando únicamente el index y en la segunda parte se quitará el index.
Si por el contrario no quieres quitar los .html, pero sí quieres quitar el index.html, basta con modificar ligeramente el código anterior (y omitir la parte de quitar los .html, obviamente, aunque sí deberás añadir la directiva RewriteEngine On antes de meter cualquier directiva rewrite).
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . %1 [R=301,NE,L]
Si quieres redirigir la web sin www a www, debes añadir estas líneas.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^donwordpress.com [NC]
RewriteRule ^(.*)$ https://www.donwordpress.com/$1 [L,R=301]
Basta con poner la primera línea una vez, por lo que ya la has puesto antes, no es necesario volver a ponerla (siempre que sitúes las nuevas directivas bajo la directiva RewriteEngine On.
En otro artículo hablaremos de los códigos de error y cómo redirigirlos para mostrar mensajes personalizados, pero en este artículo vamos a comentar una redirección de un código de error que no se debe hacer.
Y no es otra que la redirección 404. Es posible que hayas visto en algún sitio cómo alguien redirige el ćodigo de error 404 (el fichero que se busca no se encuentra) al dominio principal.
ErrorDocument 404 http://www.dominio.com/
A nivel de usuario puede no suponer un problema, pero a nivel de seo sí. Y se debe a que los navegadores interpretan esto como un funcionamiento anormal y penalizará a la web.
Peligros de encadenar redirecciones
Debes saber que las redirecciones se calculan de forma secuencial de arriba hacia abajo. Para mostrártelo vamos a plantear el siguiente caso.
Tienes una categoría de plugins y has metido ahí todos los artículos de WooCommerce, pero decides crear una nueva categoría para woocommerce debido a la gran cantidad de artículos que hay.
Tras cambiar la categoría a todos los artículos de WooCommerce, tienes que crear una directiva como la de abajo por cada artículo al que hayas cambiado de categoría.
Redirect /blog/category/plugins/articulo_1 /blog/category/woocommerce/articulo_1
Redirect /blog/category/plugins/articulo_2 /blog/category/woocommerce/articulo_2
Redirect /blog/category/plugins/articulo_3 /blog/category/woocommerce/articulo_3
Más tarde, decides que no quieres tener category como nombre de categoría base, y que prefieres poner cat.
Para ello creas la siguiente directiva:
Redirect /blog/category/ /blog/cat
Si alguien accede a la url original del artículo_1, que es http://dominio.com/blog/category/plugins/articulo_1, se redirigirá en primer lugar a http://dominio.com/blog/category/woocommerce/articulo_1, y en segundo lugar a http://dominio.com/blog/cat/woocommerce/articulo_1.
Así, cuando un usuario entre en la url original, verá el contenido correctamente y no se dará cuenta de las redirecciones, aunque cuando acceda un navegador obtendrá dos códigos 302 (redirección temporal), y uno 200 (OK).
Si en lugar de poner la redirección de category a cat al final, se pone al principio, al buscar la url original, http://dominio.com/blog/category/plugins/articulo_1, ésta será redirigida a http://dominio.com/blog/cat/plugins/articulo_1. Como esta URL no coincide con la de cambiar la categoría de los artículos, no se ejecutará, y por tanto el usuario final tendrá un código 404 (el fichero no existe), y el navegador un 302 seguido de un 404.
Conclusión
Las redirecciones son tremendamente útiles, ya que permiten redirigir las URLs indexadas que ya no exitan o que no queramos mostrar a otro contenido.
Tampoco debemos abusar de las redirecciones, ya que al usar redirecciones haremos que la web tarde más en cargar, y los navegadores podrían penalizar el abuso de redirecciones.
Por otra parte, las redirecciones son acumulativas, por lo que si no controlamos perfectamente lo que queremos redirigir podríamos acabar con nuestra web rota.
Puedes combinar el uso de las redirecciones y del fichero robots.txt. De este modo podrás redirigir las páginas que no existan o que no quieras mostrar y además podrás evitar que los buscadores indexen dichas páginas.