Clicky

Joomla: 'No se le permite utilizar ese enlace para acceder directamente a la página', cuando mod_expires está habilitado

error Joomla!

You are not permitted to use that link to directly access that page (#id)

Este es un error que se me ha producido en alguna ocasión con chrome, no últimamente, pero parece que a otros usuarios de Joomla! les sigue apareciendo. He encontrado una posible solución y la dejo a continuación por si le ayuda a alguien.

El error se produce al intentar editar un elemento de contenido (incluso módulos o plugins) haciendo clic en el título del elemento en el administrador (y no utilizar las casillas de verificación de la izquierda del título).

Al hacer esto dos veces, en el segundo intento salta el error:

"No se le permite usar ese enlace para acceder directamente a esa página (#id)."

O en inglés:

"You are not permitted to use that link to directly access that page (#id)."

error acceso a contenido en Joomla

Ten en cuenta que en los siguientes clics el error puede desaparecer, pero todavía es imposible llegar a la página de edición haciendo clic en el título del contenido.

Para replicar el problema raíz con una configuración mínima

Para replicar el problema - con 100% de fiabilidad:

1. Activar el módulo expires en apache
2. Añadir a .htaccess

ExpiresActive On
ExpiresDefault "access plus 30 days"

Si tu archivo .htaccess tiene lo siguiente:

ExpiresActive On
ExpiresDefault "now plus 1 hour"

Añadir la siguiente línea inmediatamente después:

ExpiresByType text/html "now"

Esta nueva línea "indica al navegador que expirará cualquier contenido PHP/HTML de inmediato" de modo que la información de caché de sesión no se guarda durante 1 hora. La adición de esta línea solucionó el problema en Chrome, IE 11 y Edge. El problema original no parecía ocurrir en Firefox.

Ten en cuenta que si abres el Panel de herramientas de desarrollo de Google, la pestaña Red y habilitas la opción Desactivar caché para que el problema "desaparezca" y mientras está desactivada la caché, puedes editarlo haciendo clic en su título.

La raíz del problema

La causa raíz del problema es que con el módulo Expires activado en apache, las respuestas de Joomla, que son redireccionamientos, no emiten los encabezados correctos, lo que permite a los navegadores almacenar en caché los redireccionamientos. En visitas subsiguientes, el navegador "salta" un evn preguntando Joomla para una respuesta, y simplemente "salta" sobre la solicitud y abre la url de destino de redireccionamiento. Desafortunadamente, la URL "omitida" comprueba el elemento para el usuario y es un requisito previo para que el formulario de edición pueda cargarse, ya que se omite, no hay registro de exclusión en la sesión y, por lo tanto, se muestra un mensaje no autorizado.

La solución de este problema

La solución final para resolver este problema es doble:

1. Asegúrate de que la acción del controlador de "edición" no se almacena en caché mediante el uso de JFactory::getApplication()->allowCache(FALSE);
2. En lugar de cerrar la conexión en la edición del método de redireccionamiento, ejecuta correctamente el método ->respond() que comprueba correctamente si la respuesta se puede almacenar en caché y si no, establece los encabezados adecuados

Nota a las pruebas

Si en el navegador ya dispones de direcciones URL en caché, (o te salta un error conocido de Google Chrome https://bugs.chromium.org/p/chromium/issues/detail?id=91740 ), entonces este nuevo código ni siquiera trabajará. Simplemente borrar el caché del navegador no es suficiente a veces, las redirecciones están todavía en caché!

No se puede probar esto en un servidor al que no se tenga acceso completo

Si no tienes el CONTROL COMPLETO sobre tu servidor de apache, .htaccess, y una COMPRENSIÓN COMPLETA de los problemas antedichos, NO INTENTES probar esta solución.

De cualquier forma los desarrolladores del Joomla conocen de sobra el problema y lo repararán par la versión 3.7.0

Jesus_Caceres