web-dev-qa-db-fra.com

Comment masquer les nœuds auxquels les utilisateurs et les moteurs de recherche ne doivent pas accéder directement?

J'ai constaté qu'il y a des moments où j'ai un nœud qui contient simplement du contenu qui sera affiché ailleurs, mais qui ne devrait pas être affiché directement. Autrement dit, personne ne devrait jamais aller au nœud/1234, mais le contenu du nœud 1234 devrait être affiché ailleurs. Par exemple, je crée une page À propos avec un contenu à onglets à l'aide de vues. Il y a donc des pages "À propos de moi", "À propos de nous" et "À leur sujet". Tous ces éléments sont affichés sur une seule page avec des onglets utilisant des vues. Je ne veux donc pas que les gens accèdent directement au nœud "À propos de nous" car ils ne verraient pas les onglets des autres pages. Dans le même temps, je ne veux pas que Google donne aux gens un lien direct vers ce nœud, je veux limiter l'accès afin que les utilisateurs ne puissent y accéder que via la vue (c'est-à-dire l'onglet).

Je dois donc restreindre l'accès au nœud, le supprimer des résultats de recherche Drupal, et m'assurer que Google ne le détecte pas. Des suggestions?

49
Chaulky

Cela me semble être un bon cas d'utilisation pour le module Panneaux parce que vous pouvez créer des panneaux qui remplaceront les pages de nœuds, et pouvez définir le contexte du panneau d'une manière qui devrait garantir aux utilisateurs de voir la page que vous voulez pour les voir ainsi que les règles d'accès aux pages du panneau si vous en avez besoin. Pour plus de détails, voir ce post sur d.o.

27
coderintherye

Le module Rabbit Hole offre cette fonctionnalité.

Rabbit Hole est un module qui ajoute la possibilité de contrôler ce qui doit se produire lorsqu'une entité est consultée sur sa propre page.

Vous avez peut-être un type de contenu qui ne devrait jamais être affiché sur sa propre page, comme un type de contenu d'image affiché dans un carrousel. Rabbit Hole peut empêcher ce nœud d'être accessible sur sa propre page, via node/xxx.

32
Pierre Buyle

Une option peut être de ne jamais publier le nœud mais de laisser la page client ignorer leur état de publication. Ainsi, dans votre exemple, votre vue "À propos" peut simplement ignorer l'état de publication de vos nœuds "À propos de xxx". Étant donné que les nœuds ne sont pas publiés, les utilisateurs non autorisés ne peuvent pas y accéder et ne doivent pas être indexés par le moteur de recherche.

Une autre solution consiste à utiliser une implémentation hook_nodeapi('view') / hook_node_view() pour émettre une drupal_goto() ou drupal_access_denied() lorsque la page du nœud est visitée par un utilisateur non autorisé. N'oubliez pas que hook_nodeapi() / hook_node_view() sont utilisés dans de nombreux cas et pas seulement lors de l'affichage d'une page de nœud.

hook_menu_alter() peut également être utilisé pour modifier le rappel d'accès des pages de noeud pour refuser l'accès aux masqués nœuds.

Le mieux est probablement de ne pas baser le filtrage sur l'ID de nœud codé en dur mais d'utiliser soit un champ personnalisé sur le nœud (en utilisant l'API CCK/Field ou une table personnalisée) ou une liste de cachés nœuds stockés dans une variable .

12
Pierre Buyle

Pour Drupal 7, le Rabbit Hole fournit cette fonctionnalité.

Rabbit Hole est un module qui ajoute la possibilité de contrôler ce qui doit se produire lorsqu'une entité est affichée sur sa propre page.

Cela fonctionne en fournissant plusieurs options pour contrôler ce qui doit se produire lorsque l'entité est affichée sur sa propre page. Vous avez la possibilité de

  1. Fournissez une page d'accès refusé.

  2. Livrer une page non trouvée.

  3. Émettez une redirection de page vers n'importe quel chemin ou URL externe.

  4. Ou affichez simplement l'entité (comportement normal).

Comment :

Activer les sous-modules de nœuds Rabbit Hole Ensuite, nous obtiendrons la section de configuration associée à chaque formulaire dans Drupal CODE

6
niksmac

Résolu. J'ai d'abord essayé la réponse de Pierre Buyle, mais si vous dépubliez un nœud, il ne peut pas être accédé correctement et ces nœuds deviennent inutiles. Dans mon cas, j'ai des nœuds parents et enfants, seuls les nœuds enfants (à des fins d'administration) sont ceux qui doivent être masqués et NON indexés par les robots. Ce que je l'ai fait avec le gestionnaire de pages a fait une redirection d'URL (en cachant ces nœuds à tous les utilisateurs sauf l'administrateur) avec une réponse http selon ce tutoriel par http://www.wunderkraut.com/1 et les noeuds sans index des robots d'indexation sont gérés par module No-index sans noeud . Cela fonctionnera même si vous n'avez pas de relation de nœud paret-enfant. Lien vers le tutoriel:

5
pinueve

Dans Drupal 7, il devrait également être possible d'utiliser hook_node_access () , il s'agit d'un hook normal en D7 qui peut être implémenté par tous les modules pour tous les types de nœuds. Vous pouvez ensuite refuser l'accès si l'utilisateur essaie d'afficher le nœud sur son propre nœud/nid.

Vous devrez probablement également implémenter hook_query_node_access_alter () et y ajouter une coche pour masquer le nœud dans les résultats de recherche. Cela pourrait même suffire à lui seul et vous n'avez pas besoin de hook_node_access (). Et cela pourrait même fonctionner dans D6 car vous pouvez également y modifier la requête, mais c'est beaucoup plus facile dans D7 en raison du générateur de requêtes.

3
Berdir

Définissez simplement ces nœuds comme "non publiés", puis, dans la vue, ajoutez le filtre "nœud publié: non".

Comme note de référencement, est une bonne pratique pour créer un type de contenu personnalisé pour ces nœuds "fantômes", et dire à pathauto de leur donner des URL spécifiques (j'utilise /dev/null/[title-raw];): même si le nœud n'est pas publié, il aura son propre alias d'URL, donc dans votre exemple, si vous créez d'abord le nœud fantôme 'à propos de nous', puis la page de visualisation 'à propos de nous', l'url du second sera être example.com/about-us-0 becose example.com/about-us a été tiré du fantôme (cependant, vous pouvez définir les chemins manuellement)

2
Strae

Vous pouvez le faire en utilisant les modules de règles.
+ Créer une nouvelle règle avec l'événement "Le contenu est affiché".
+ Ajoutez quelques conditions par exemple: L'utilisateur a un (des) rôle (s): anonyme, Le chemin a un alias d'URL: node/xyz (c'est le nœud que vous souhaitez limiter pour l'utilisateur anonyme). N'oubliez pas d'ajouter la condition "et" ou "ou" si nécessaire.
+ Créez une action pour rediriger vers une autre page ou faites autre chose. Ceci est l'exemple de code que j'ai exporté pour vous

{ "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

Vous pouvez utiliser n'importe quel type de système d'accès aux nœuds et utiliser des vues3. Là, vous ne pouvez pas désactiver la réécriture SQL sur les paramètres de requête et vous pouvez donc désactiver le système d'accès au nœud sur cette vue.

2
Daniel Wehner

Je pense que la façon la plus simple d'accomplir ce que vous voulez est d'utiliser le gestionnaire de pages (Ctools), est vraiment simple à utiliser, tout ce que vous avez à faire est de spécifier quel nœud rediriger où (dans ce cas, d'un nœud à un autre)

1
Nicolas_ii

Le module Content Access répondra parfaitement à vos besoins.

Ce module vous permet de gérer les autorisations pour les types de contenu par rôle et auteur. Il vous permet de spécifier des autorisations d'affichage, de modification et de suppression personnalisées pour chaque type de contenu. En option, vous pouvez activer les paramètres d'accès par contenu, afin de personnaliser l'accès pour chaque nœud de contenu.

Il a également un bonne documentation pour vous aider à démarrer.

1
AjitS

Si vos nœuds de "contenu inclus" doivent rester inaccessibles, envisagez de bloquer/node/* sur le serveur Web "location =/node/*" level. Par défaut, refuser l'accès à tous/nœuds. La valeur par défaut autorise l'accès aux nœuds qui ont reçu un chemin d'accès automatique comme/pages.

(Le mot de passe de base .htaccess pour les sous-répertoires est également un moyen décent de bloquer l'indexation de recherche accidentelle par des robots externes.)

Vous ne pouvez jamais garantir qu'un nœud ne deviendra pas accessible via un module contribué qui se trouve être installé à l'avenir, ou un que vous ne comprenez pas encore complètement. (Résultats de recherche, listes, vues par défaut, aperçu des catégories de taxonomie ...)

C'est à cela que servent les nœuds.

La confidentialité de votre "contenu inclus" est-elle importante pour vous? Si oui, alors ...

  1. Tout ce qui a une URL sera finalement touché par Google.

    Parce que les moteurs de recherche ne dépendent pas uniquement des araignées de liens. Ils évaluent également les commentaires du navigateur, etc. Aucun module robot.txt ou pathauto, globalredirect, rabbithole ne vous aidera à dormir en paix. Si le nœud est accessible, il sera indexé. Peut-être par votre propre navigateur/addons.

  2. Reconsidérez si "le contenu qui doit être inclus" devrait vraiment être un nœud, si personne ne doit y accéder en tant que page ?

    Si votre "contenu inclus" est stocké dans un mini-panneau/bloc/extrait/bean/..., alors vous courez un risque beaucoup plus faible qu'il soit répertorié ou apparaisse comme une page avec une URL automatique que vous ne connaissez pas encore . (pages de présentation de la taxonomie, recherche, vues ...)

1
user18099

Le module Restrict Node Page View fait exactement ce que vous voulez.

De la description du module:

Avez-vous déjà utilisé un nodetype de diaporama que vous devez publier, mais vous ne voulez pas que le nœud soit accessible par lui-même en utilisant le chemin node/XXX? Ce module est fait pour vous!

Avec ce module, vous pouvez restreindre l'accès au mode d'affichage full du nœud, vous ne pouvez donc pas accéder au nœud sur node/XXX.

0
user72672