Rabbit Hole
Controla el comportamiento de las páginas canónicas de entidades, permitiendo redirecciones, denegación de acceso o respuestas 404 en lugar de mostrar el contenido.
rabbit_hole
Install
composer require 'drupal/rabbit_hole:8.x-1.0'
Overview
Rabbit Hole añade la capacidad de controlar qué debe suceder cuando una entidad se visualiza en su propia página (URL canónica). Esto es útil para entidades que no deberían ser directamente accesibles, como nodos usados solo como fuente para Views o párrafos que nunca deberían visualizarse de forma independiente.
El módulo proporciona cuatro comportamientos integrados: mostrar la página normalmente, devolver una respuesta 403 Acceso Denegado, devolver una respuesta 404 Página No Encontrada, o redirigir a otra URL con códigos de respuesta HTTP configurables. El soporte de Token permite destinos de redirección dinámicos basados en valores de campos de la entidad.
La configuración puede establecerse a nivel de tipo de entidad, a nivel de bundle, o sobrescribirse por entidad individual. El sistema de permisos permite a los administradores configurar comportamientos mientras permite a ciertos usuarios eludir las restricciones y ver las páginas normalmente.
El módulo utiliza una arquitectura de plugins que permite a los desarrolladores crear comportamientos personalizados más allá de las cuatro opciones integradas. Todos los comportamientos se invocan a través de un event subscriber que intercepta las solicitudes del kernel a las rutas canónicas de entidades.
Features
- Control del comportamiento de páginas canónicas para cualquier tipo de entidad de contenido con una plantilla de enlace canónico
- Cuatro comportamientos integrados: Mostrar Página, Acceso Denegado (403), Página No Encontrada (404) y Redirección de Página
- La redirección de página soporta códigos de respuesta HTTP configurables (301, 302, 303, 304, 305, 307)
- Soporte de Token en rutas de redirección para destinos dinámicos basados en valores de campos de la entidad
- Configuración de comportamiento alternativo cuando la ruta de redirección es inválida o está vacía
- Configuraciones de sobrescritura por tipo de entidad, por bundle y por entidad
- Elusión basada en permisos que permite a los administradores ver páginas restringidas
- Visualización opcional de mensaje de advertencia para usuarios que eluden la acción configurada
- Arquitectura de plugins para crear plugins de comportamiento personalizados
- El event subscriber intercepta eventos kernel.request y kernel.response para rutas canónicas de entidades
- Hooks de alteración para modificar valores de comportamiento y respuestas programáticamente
- Almacenamiento de entidad de configuración para ajustes a nivel de bundle
- Tipo de campo personalizado para almacenar configuraciones de sobrescritura por entidad
- Soporte de configuraciones traducibles por entidad
Use Cases
Ocultar nodos de páginas de aterrizaje usados solo como fuentes de Views
Cuando se usan nodos como fuentes de datos para Views (ej., un tipo de contenido 'Diapositiva' que alimenta una presentación), las páginas de nodos individuales no tienen contenido útil. Configura Rabbit Hole con comportamiento 'Página no encontrada' o 'Redirección de página' para estos tipos de contenido para evitar que los usuarios accedan a páginas sin sentido mientras los nodos permanecen utilizables en Views.
Redirigir páginas de productos a listados de categorías
Para sitios de comercio electrónico donde las páginas individuales de productos no deberían ser directamente accesibles, configura Rabbit Hole con comportamiento 'Redirección de página' usando un token como [node:field_category:entity:url] para redirigir a los visitantes a la página de categoría del producto.
Restringir acceso a contenido premium
Usa el comportamiento 'Acceso denegado' para tipos de contenido que requieren acceso especial. Combinado con el permiso de elusión, los suscriptores premium pueden ver las páginas normalmente mientras los usuarios anónimos ven mensajes de acceso denegado.
Prevenir acceso directo a elementos de biblioteca de párrafos
Los elementos de biblioteca de párrafos típicamente solo deberían verse dentro del contexto de su entidad padre. Configura Rabbit Hole con 'Página no encontrada' para prevenir el acceso directo por URL a estos elementos.
Redirecciones SEO para contenido migrado
Al migrar contenido de una estructura de sitio antigua, usa el comportamiento 'Redirección de página' con 301 (Movido Permanentemente) para redirigir patrones de URL antiguos a nuevas ubicaciones, preservando el valor SEO.
Redirigir perfiles de usuario a directorio externo
Para organizaciones que usan un directorio de personal externo, configura Rabbit Hole en entidades de usuario para redirigir páginas de perfil a la URL del directorio externo, posiblemente usando tokens para construir URLs específicas del usuario.
Crear páginas honeypot para monitoreo de seguridad
Crea tipos de contenido que activen respuestas de 'Acceso denegado'. Cualquier intento de acceso a estas páginas puede ser registrado y monitoreado como actividad potencialmente maliciosa.
Tips
- Habilita el módulo Token para opciones mejoradas de rutas de redirección con reemplazo dinámico de tokens basado en campos de entidad
- Usa redirecciones 301 (Movido Permanentemente) para cambios de URL permanentes y 302 (Encontrado) para redirecciones temporales para asegurar el manejo SEO apropiado
- El permiso de elusión permite a los editores de contenido previsualizar páginas que de otro modo estarían restringidas - otórgalo a roles de confianza
- Al deshabilitar sobrescrituras de entidad para un bundle con valores existentes, todas las configuraciones por entidad serán eliminadas - el mensaje de confirmación previene pérdida accidental de datos
- Prueba exhaustivamente las rutas de redirección cuando uses tokens - las rutas inválidas activarán el comportamiento alternativo
- Para sitios multilingües, las configuraciones de Rabbit Hole son traducibles, permitiendo diferentes comportamientos por idioma
- Los plugins de comportamiento personalizados pueden crearse extendiendo RabbitHoleBehaviorPluginBase y usando la anotación @RabbitHoleBehaviorPlugin
- Los submódulos obsoletos (rh_node, rh_user, etc.) serán eliminados en la versión 3.0 - migra al sistema de configuración unificado
Technical Details
Admin Pages 2
/admin/config/content/rabbit-hole
Página de configuración principal para habilitar la funcionalidad de Rabbit Hole en diferentes tipos de entidad. Muestra una tabla de todos los tipos de entidad de contenido soportados con casillas de verificación para habilitar/deshabilitar Rabbit Hole para cada tipo. Para los tipos de entidad habilitados, muestra las configuraciones actuales de bundle incluyendo el comportamiento predeterminado y si se permiten sobrescrituras por entidad.
/admin/config/content/rabbit-hole/{entity_type_id}
Página de configuración para establecer el comportamiento de Rabbit Hole en bundles específicos de un tipo de entidad. Permite establecer el comportamiento predeterminado, habilitar sobrescrituras por entidad y configurar opciones de elusión para cada bundle.
Permissions 3
Hooks 3
hook_rabbit_hole_values_alter
Permite a los módulos alterar los valores de Rabbit Hole antes de que el plugin de comportamiento sea cargado y ejecutado. Puede modificar la acción, acceso de elusión, o cualquier otro valor que afecte la ejecución del comportamiento.
hook_rabbit_hole_response_alter
Permite a los módulos alterar la respuesta después de que el método performAction() del plugin de comportamiento ha sido ejecutado. Puede modificar destinos de redirección o reemplazar la respuesta completamente.
hook_rabbit_hole_rabbit_hole_behavior_plugin_info_alter
Permite a los módulos alterar las definiciones de plugins de comportamiento descubiertas por el administrador de plugins.
Troubleshooting 7
Rabbit Hole solo soporta tipos de entidad de contenido que tienen una plantilla de enlace canónico definida. Verifica que la definición de tu tipo de entidad incluya una plantilla de enlace 'canonical'.
Verifica que el usuario no tenga el permiso 'Eludir acción de Rabbit Hole' para el tipo de entidad. Comprueba si 'Deshabilitar elusión basada en permisos' está habilitado en la configuración del bundle.
Asegúrate de que el módulo Token esté instalado y habilitado. Verifica que la sintaxis del token sea correcta para el tipo de entidad (ej., [node:field_name] para nodos, [user:field_name] para usuarios).
Este es el comportamiento esperado. Rabbit Hole redirige automáticamente al formulario de edición de la entidad después de guardar cuando un comportamiento de no-visualización está configurado para evitar aterrizar en páginas de error.
Si las entidades tienen valores de sobrescritura por entidad almacenados en la base de datos, primero debes deshabilitar las sobrescrituras para todos los bundles (lo cual elimina los valores) antes de poder deshabilitar el tipo de entidad.
Verifica que 'Permitir que estas configuraciones sean sobrescritas para entidades individuales' esté habilitado para el bundle, y que el usuario actual tenga el permiso 'Administrar configuración de Rabbit Hole para [tipo de entidad]'.
La acción alternativa solo se activa cuando la ruta de redirección es inválida o está vacía después del reemplazo de tokens. Prueba con una entidad que tenga valores vacíos en los campos de token.
Security Notes 6
- Rabbit Hole está cubierto por la política de avisos de seguridad de Drupal
- La funcionalidad de redirección valida URLs para prevenir vulnerabilidades de redirección abierta - las URLs externas se manejan vía TrustedRedirectResponse
- Las verificaciones de permisos se realizan antes de mostrar opciones de configuración - los usuarios sin permiso 'rabbit hole administer' no pueden ver ni modificar configuraciones
- La opción 'no_bypass' permite la aplicación estricta de comportamientos incluso para administradores - úsala con cuidado ya que puede bloquear el acceso al contenido
- Los valores de sobrescritura por entidad se almacenan en un campo estándar de Drupal con control de acceso apropiado
- El reemplazo de tokens en rutas de redirección se sanitiza a través del sistema de tokens de Drupal