Firefox y el cacheo de las redirecciones 301 de .htaccess

A partir de la versión 5 de Firefox, se introdujo una funcionalidad y era la de cachear las redirecciones. Esto personalmente, no me gusta nada y mucho menos si eres un developer y tienes que estar testeando tu aplicación no quieres que se cachen este tipo de eventos. Más adelante explicaré que también es normal que se tengan que cachear este tipo de redirecciones.

Si Firefox cachea redirecciones a nivel de .htaccess, renderizará las viejas redirecciones en vez de las nuevas actualizadas en el .htaccess.

Ahora bien cual es el problema? Pues que como no tengas esto en cuenta puedes estar trabajando en tu código y estar el tiempo que sea hasta que te des cuenta que tan solo se trata de vaciar la cache de firefox, puede ser una tonteria pero me ha pasado en un par de ocasiones estar mas de media hora trabajando y al final darme cuenta que es el cacheo de las redirecciones en firefox y cabrearme bastante!!

Seguro que a mas de uno le ha pasado.

Lo explicaré con un ejemplo

Vamos a decir que tenemos la url /tienda/categoria1-categoria2-subcategoria1-subcategoria2-c-10_10.html (este es un formato presente en las url de oscommerce)

Hago una redireccion a una url nueva y mejor para SEO, con el siguiente formato /tienda/categoria1-categoria2/subcategoria1-subcategoria2

Para ello creo una simple redireccion a nivel de .htaccess (esta redirección contiene un error)

RewriteRule ^tienda/([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)-c-([0-9]+)_([0-9]+).html$ http://%{HTTP_HOST}/tienda/$1-$2-$3/$4 [R=301,L]

Pruebo la redireccion que he creado en el navegador y la url vieja me está redirigiendo al siguiente tipo de url nueva
/tienda/categoria1-categoria2-subcategoria1/subcategoria2 upss esta url está mal no es lo que quería!! tendré que cambiarlo.

Volvemos al .htaccess y lo cambiamos por el patrón correcto

RewriteRule ^tienda/([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)-c-([0-9]+)_([0-9]+).html$ http://%{HTTP_HOST}/tienda/$1-$2/$3-$4 [R=301,L]

Introduzco la url vieja y me sigue redirigiendo a la url anterior cuyo formato era /tienda/categoria1-categoria2-subcategoria1/subcategoria2.

Vaya que estará pasando? vuelvo a .htaccess y sigo haciendo cambios, ninguno funciona, sigue rediriendigo a la misma url por mas cambios que hago, después de un rato ya caigo, maldito cacheo!! En el Menu de firefox > Herramientas > Limpiar el historial reciente y seleccionar cache, pulsar el botón “limpiar ahora”.

Ahora ya redirige a mi url nueva y mejorada.

Conclusión

Como he puesto en el título del artículo esto tan sólo ocurre con las redirecciones tipo 301, por lo menos es con las que he llegado a probar. Si el tipo es 302,304 o un 307 no me ha cacheado la redirección.

Mas allá de que el problema sea de Firefox, ya que las pruebas que he hecho con Chrome e IE 8 no me ha cacheado la redireción, las redirecciones 301 son un tipo de redireccion permanente por lo que tiene sentido que sean cacheadas, ver un listado de los posibles tipos de códigos para los status de las peticiones http.

Para evitar esto habrá que ver que política se usa en el comportamiento de cache-control http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 metiendo un tiempo de cacheo muy breve o directamente un Cache-Control: no-cache.

La otra solución es vaciar siempre la cache del navegador cuando se hacen pruebas con redirecciones 301.

Para hacerlo más rápido se puede instalar la extensión “clear cache button”

Y meterlo en la barra de navegación para tenerlo siempre accesible

2 opiniones en “Firefox y el cacheo de las redirecciones 301 de .htaccess”

  1. Me ha pasado eso hace unas semanas y estuve bastante tiempo hasta que me di cuenta de esto que tu marcas…. 🙁

    Seguramente este post ayudara a muchos otros!
    Saludos

Deja un comentario

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