En uno de mis últimos proyectos de PrestaShop, me encontré con un error que provocaba un bucle de redireccionamiento al acceder al carrito. Este error ocurría sólo en algunas ocasiones y no parecía seguir ningún patrón que pudiera detectar. Durante varios días, busqué respuestas entre los Foros de PrestaShop. Encontré bastante información sobre el tema y probé distintas soluciones tales como:
- Desactivar y volver a activar las urls amigables.
- Modificar la redirección de urls canónicas.
- Desactivar la opción Apache’s MultiViews.
- Revisar mi htaccess.
- …
Prácticamente cada vez que probaba alguna de estas soluciones, y depsués de eliminar caché y cookies, el error parecía desaparecer, pero poco duraba mi alegría ya que al día siguiente, generalmente, el cliente volvía a llamarme con la misma incidencia.
La solución
Finalmente, encontré Foro de PrestaShop: solución al bucle de redireccionamiento.
In my case was a translation issue… but my problem was only in checkout process.
In Preferences > Seo&Urls you can translate the friendly url for each page of your store and the translated name must be unique, not equal to other page.
In my case page order.php and order-opc.php where both with the same friendly url. Now order-opc.php is called quick-order and order.php is called order.
El usuario habla de su propia experiencia. En su caso, el error residía en que dos páginas diferentes «order.php» y «order-opc.php» tenían la misma url amigable configurada en la administración de PrestaShop. Esta url amigable debe ser única porque sino PrestaShop provoca un bucle de redireccinamiento en algunas ocasiones por no saber qué pagina tiene que servir al navegador. En cuanto leí esa explicación, se me encendió la bombilla.
Efectivamente, tenía un problema parecido en mi tienda online. La página “order.php” y “cart.php” tenían la misma url amigable: “cart”. En cuanto modifiqué esto y puse dos urls amigables diferentes y únicas, el error desapareció de nuevo pero esta vez definitivamente.
Keep it simple
La solución estaba justo delante de mis narices. Era mucho más sencilla de lo que pensaba y bastante lógica. Me compliqué la vida buscando soluciones más elaboradas relacionadas con el htaccess, configuración del apache o servidor, … Llegué a pensar en un problema de compatibilidad entre el tema que estaba utilizando y la versión de PrestaShop. Pensé en varias ocasiones en enviar un ticket al soporte del tema pero no lo hice porque no tenía la total seguridad de que el culpable fuera el tema. La solución era sencillamente un fallo humano al traducir la url amigable.
Seguramente, te haya pasado a ti también. En algunas ocasiones, enfocamos las incidencias de forma equivocada y nos ponemos inmediatamente en lo peor. Primero, culpamos nuestro código, luego el servidor, luego el creador del tema, … La mayoría de las veces, la solución suele ser la más lógica pero suele ser de las últimas cosas que vamos a comprobar. Cuantas veces no hemos estado hurgando en el código durante 1 o 2 horas, sin acercarnos ni siquiera a la solución. Llega un punto en el que es mejor dejarlo estar y despejar nuestra mente, pasear, cambiar de proyecto, ir a comer, tomar un café, … Cuando volvemos a sentarnos, con la mente despejada, la solución se nos aparecerá mágicamente.