it-swarm-es.com

¿Cómo oculto los nodos a los que no se debe acceder directamente desde los usuarios y los motores de búsqueda?

Descubrí que hay veces que tengo un nodo que simplemente contiene contenido que se mostrará en otro lugar, pero que no debería verse directamente. Es decir, nadie debería ir al nodo/1234, pero el contenido del nodo 1234 debería mostrarse en otro lugar. Por ejemplo, creo una página acerca de contenido con pestañas usando vistas. Así que hay páginas "Acerca de mí", "Acerca de nosotros" y "Acerca de ellos". Todos estos se muestran en una sola página con pestañas usando Vistas. Por lo tanto, no quiero que las personas accedan directamente al nodo "Acerca de nosotros" porque no verían las pestañas de las otras páginas. Al mismo tiempo, no quiero que Google proporcione a las personas un enlace directo a este nodo, quiero limitar el acceso para que los usuarios solo puedan acceder a él a través de la Vista (es decir, la pestaña).

Por lo tanto, necesito restringir el acceso al nodo, eliminarlo de los resultados de búsqueda Drupal) y asegurarme de que Google no lo detecte. ¿Alguna sugerencia?

49
Chaulky

Esto me parece un buen caso de uso para Módulo de paneles porque puede crear paneles que anularán las páginas de nodos y puede establecer el contexto para el panel de una manera que garantice a los usuarios ver la página que desea para verlo, así como las reglas de acceso para las páginas del panel si las necesita. Para más detalles, vea esta publicación en d.o.

27
coderintherye

El módulo Rabbit Hole proporciona esta función.

Rabbit Hole es un módulo que agrega la capacidad de controlar lo que debería suceder cuando una entidad se está viendo en su propia página.

Quizás tenga un tipo de contenido que nunca debería mostrarse en su propia página, como un tipo de contenido de imagen que se muestra en un carrusel. Rabbit Hole puede evitar que este nodo sea accesible en su propia página, a través de node/xxx.

32
Pierre Buyle

Una opción puede ser nunca publicar el nodo pero hacer que la página de consumidor ignore su estado de publicación. Por lo tanto, en su ejemplo, su vista "Acerca de" puede ignorar el estado de publicación de sus nodos "Acerca de xxx". Como los nodos no se publican, los usuarios no autorizados no pueden acceder a ellos y el motor de búsqueda no debe indexarlos.

Otra solución es utilizar una implementación hook_nodeapi('view') / hook_node_view() para emitir una drupal_goto() o drupal_access_denied() cuando la página del nodo es visitada por un usuario no autorizado. Tenga en cuenta que hook_nodeapi() / hook_node_view() se usan en muchos casos y no solo cuando se visualiza una página de nodo.

hook_menu_alter() también se puede usar para alterar la devolución de llamada de acceso de las páginas de nodo para denegar el acceso a la oculta nodos.

Probablemente lo mejor no sea basar el filtrado en una ID de nodo codificada, sino usar un campo personalizado en el nodo (usando CCK/Field API o una tabla personalizada) o una lista de oculta nodos almacenados en una variable .

12
Pierre Buyle

Para Drupal 7, el Rabbit Hole proporciona esta función.

Rabbit Hole es un módulo que agrega la capacidad de controlar lo que debería suceder cuando una entidad se está viendo en su propia página.

Esto funciona al proporcionar múltiples opciones para controlar lo que debería suceder cuando la entidad se está viendo en su propia página. Tienes la habilidad de

  1. Entregar una página de acceso denegado.

  2. Entregar una página no encontrada.

  3. Emita una página redirigida a cualquier ruta o URL externa.

  4. O simplemente muestra la entidad (comportamiento regular).

Cómo :

Habilite el submódulo nodos de Rabbit Hole Luego obtendremos la sección de configuración asociada con cada formulario en Drupal CÓDIGO

6
niksmac

Resuelto Primero probé la respuesta de Pierre Buyle, pero si anula la publicación de un nodo, no se puede acceder correctamente y esos nodos se vuelven inútiles. En mi caso, tengo nodos primarios y secundarios, solo los nodos secundarios (para fines administrativos) son los que deben ocultarse y NO ser indexados por los rastreadores. Lo que hice con el administrador de páginas hizo una redirección de URL (ocultando estos nodos a todos los usuarios excepto al administrador) con una respuesta http de acuerdo con este tutorial por http://www.wunderkraut.com/1 y los nodos no indexados por los rastreadores se manejan mediante módulo Node no indexado . Esto funcionará incluso si no tiene una relación de nodo pareto-hijo. Enlace al tutorial:

5
pinueve

En Drupal 7, también debería ser posible usar hook_node_access () , este es un enlace normal en D7 que puede ser implementado por todos los módulos para todos los tipos de nodos. Luego puede denegar el acceso si el usuario está intentando ver el nodo en su propio nodo/nid.

Probablemente también necesite implementar hook_query_node_access_alter () y agregar una marca allí para ocultar el nodo en los resultados de búsqueda. Esto incluso podría ser suficiente por sí solo y no necesita hook_node_access (). E incluso podría funcionar en D6 porque también puede modificar la consulta allí, pero es mucho más fácil en D7 debido al generador de consultas.

3
Berdir

Simplemente configure esos nodos como 'no publicados', luego, en la vista, agregue el filtro 'nodo publicado: no'.

Como seo note, es una buena práctica crear un tipo de contenido personalizado para esos nodos 'fantasmas', y decirle a Pathauto que les dé URL específicas (uso /dev/null/[title-raw];): incluso si el nodo no está publicado, tendrá su propio alias de URL, por lo que en su ejemplo si crea primero el nodo fantasma 'sobre nosotros', y luego la página de visualización 'sobre nosotros', la URL del segundo aparecerá ser example.com/about-us-0 becose example.com/about-us se ha tomado del fantasma (sin embargo, puede establecer las rutas manualmente)

2
Strae

Puede hacerlo utilizando los módulos de reglas.
+ Crear nueva regla con el evento "Se ve contenido".
+ Agregue un par de condiciones, por ejemplo: el usuario tiene roles: anónimo, la ruta tiene un alias de URL: nodo/xyz (este es el nodo que desea limitar para un usuario anónimo). Recuerde agregar la condición "y" o "o" si es necesario.
+ Crear acción para redirigir a otra página o hacer otra cosa. Este es el código de muestra que exporté para ti

{ "rules_limit_viewing_some_nodes" : {
  "LABEL" : "Limit viewing some nodes",
  "PLUGIN" : "reaction rule",
  "REQUIRES" : [ "rules", "path" ],
  "ON" : [ "node_view" ],
  "IF" : [
     { "user_has_role" : {
       "account" : [ "site:current-user" ],
       "roles" : { "value" : { "1" : "1" } }
      }
     },
     { "AND" : [] },
     { "path_has_alias" : { "source" : "node\/28" } }
   ],
   "DO" : [ { "redirect" : { "url" : "error" } } ]
 }
}
2
Stone Vo

Puede usar cualquier tipo de sistema de acceso a nodos y usar vistas3. Allí no puede deshabilitar la reescritura de sql en la configuración de la consulta, por lo que puede deshabilitar el sistema de acceso a nodos en esta vista.

2
Daniel Wehner

Creo que la forma más fácil de lograr lo que quieres es usar el Administrador de páginas (Ctools), es realmente fácil de usar, todo lo que tienes que hacer es especificar qué nodo redirigir a dónde (en este caso, de un nodo a otro)

1
Nicolas_ii

El módulo Acceso al contenido satisfará perfectamente sus requisitos.

Este módulo le permite administrar permisos para tipos de contenido por rol y autor. Le permite especificar vistas personalizadas, editar y eliminar permisos para cada tipo de contenido. Opcionalmente, puede habilitar la configuración de acceso al contenido, por lo que puede personalizar el acceso para cada nodo de contenido.

También tiene un buena documentación para ayudarlo a comenzar.

1
AjitS

Si sus nodos de "contenido incluido" deben permanecer inaccesibles, considere bloquear/node/* en servidor web "location =/node/*" level. Denegar el acceso predeterminado a todos/nodos. De forma predeterminada, permite el acceso a los nodos que recibieron una ruta-ruta automática como/páginas.

(La contraseña básica .htaccess para subdirectorios es una forma decente de bloquear la indexación de búsqueda accidental por rastreadores externos también).

Nunca puede garantizar que un nodo no sea accesible a través de un módulo contribuido que se instalará en el futuro, o uno que aún no comprende completamente. (Resultados de búsqueda, listados, vistas predeterminadas, descripción general de la categoría de taxonomía ...)

Para eso están los nodos.

¿Es la privacidad de su "contenido incluido" tan importante para usted? Si es así, entonces ...

  1. Todo lo que tiene una URL eventualmente será alcanzado por google.

    Porque los motores de búsqueda no dependen solo de las arañas de enlace. También evalúan los comentarios del navegador, etc. Ningún módulo robot.txt o pathauto, globalredirect, rabbithole lo ayudará a dormir en paz. Si se puede acceder al nodo, se indexará. Tal vez por su propio navegador/complementos.

  2. Reconsidere si "el contenido que se va a incluir" realmente debería ser un nodo, si nadie debería acceder a él como una página ?

    Si su "contenido incluido" se almacena dentro de un mini-panel/bloque/fragmento/bean/..., entonces tiene un riesgo mucho menor de que alguna vez aparezca en la lista, o aparezca como una página con una URL automática que no conoces , todavía. (páginas de resumen de taxonomía, búsqueda, vistas ...)

1
user18099

El módulo Restrict Node Page View hace exactamente lo que desea.

De la descripción del módulo:

¿Alguna vez ha utilizado un tipo de nodo de presentación de diapositivas que necesita ser publicado pero no desea que el nodo sea accesible por sí mismo utilizando la ruta del nodo/XXX? ¡Este módulo es para ti!

Con este módulo puede restringir el acceso al modo de vista full del nodo, por lo que no puede acceder al nodo en node/XXX.

0
user72672