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

51

J'ai constaté que j'avais parfois un nœud qui contenait simplement du contenu qui serait affiché ailleurs, mais ne devrait pas être visualisé directement. Autrement dit, personne ne devrait jamais aller au noeud / 1234, mais le contenu du noeud 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 Vues. Je ne souhaite donc pas que les utilisateurs accèdent directement au nœud "À propos de nous" car ils ne verraient pas les onglets des autres pages. En 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 limiter l'accès au nœud, le supprimer des résultats de la recherche Drupal et m'assurer que Google ne l'utilise pas. Aucune suggestion?

Chaulky
la source
J'utilise actuellement Drupal 6, mais s'il est différent entre 6 et 7, je pense qu'il serait utile de répondre pour les deux
Chaulky
Si vous n'êtes préoccupé que par quelques nœuds, pourquoi ne pas les ajouter au fichier robots.txt pour les exclure des recherches Google?
Tangurena
C'est une idée fausse commune. robots.txt n'empêche pas les moteurs de recherche d' indexer votre site, il empêche les moteurs de recherche d' explorer votre site. Si quelqu'un crée un lien vers une page de votre site, Google le suit et indexe la page s'il le souhaite. Si vous souhaitez empêcher l' indexation, vous devez utiliser la méta-balise ROBOTS, c'est-à-dire: <meta name = "ROBOTS" value = "NOINDEX" />
René

Réponses:

28

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

coderintherye
la source
cela ressemble à faire exactement ce que je veux, et d'une manière simple et propre ... vient même avec un tutoriel (lien sympa) !!
Chaulky
N'est-ce pas exagéré par rapport à la solution du module Rabbit Hole? Y at-il des avantages supplémentaires à cela qui en font la réponse choisie?
Mario Awad
1
@MarioAwad Eh bien, le module Rabbit Hole n'existait même pas plus d'un an après avoir répondu à cette question. À l'époque, les panneaux étaient la meilleure solution. Je pense toujours que c'est la meilleure solution si quelqu'un a déjà installé des panneaux. Sinon, Rabbit Hole pourrait être une solution plus légère.
coderintherye
@nowarninglabel Cela semble être un bon conseil. Merci. Peut-être devriez-vous ajouter cette précision à la réponse pour la rendre meilleure pour les futurs arrivants. À votre santé.
Mario Awad
33

Le module Rabbit Hole fournit cette fonctionnalité.

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

Peut-être avez-vous 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 nœud / xxx.

Pierre Buyle
la source
Il existe maintenant une version Drupal 6.
mpdonadio
Excellent, une solution simple et propre.
jamix
1
Bien, celui-ci est meilleur que le module panel (pour ce cas d'utilisation) si vous voulez uniquement empêcher l'accès direct à un nœud content_type, car il ne fait que ça!
Larzan
13

Une option peut être de ne jamais publier le nœud mais de laisser la page consommateur ignorer son statut de publication. Ainsi, dans votre exemple, votre vue "À propos de" peut simplement ignorer le statut 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 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 un message drupal_goto()ou drupal_access_denied()lorsque la page du nœud est visitée par un utilisateur non autorisé. Sachez que hook_nodeapi()/ hook_node_view()sont utilisés dans de nombreux cas et pas seulement lors de la visualisation d'une page de nœud.

hook_menu_alter()peut également être utilisé pour modifier le rappel d’accès des pages de nœud afin de refuser l’accès aux nœuds cachés .

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

Pierre Buyle
la source
@ mongolity404 post agréable, une bonne information. M'a donné des idées pour quelques autres choses. Mais pourquoi un wiki de communauté?
Chaulky
J'ai créé mon wiki de communauté de réponses dans le cas où quelqu'un voudrait fournir un exemple de code pour les options que j'ai suggérées ...
Pierre Buyle Le
7

Pour Drupal 7, Rabbit Hole fournit cette fonctionnalité.

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

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

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

  2. Livrer une page non trouvée.

  3. Émettre une page de redirection vers un chemin ou une URL externe.

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

Comment :

Sous- module Activer les nœuds de trous de lapin Ensuite, nous aurons une section de configuration associée à chaque formulaire dans Drupal CODE

niksmac
la source
6

Résolu J'ai d'abord essayé de répondre à Pierre Buyle, mais si vous annulez la publication d'un nœud, l'accès ne sera plus correct 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 d'exploration. Ce que je l'ai fait avec le gestionnaire de pages a créé une redirection d'URL (masquant ces nœuds à tous les utilisateurs sauf l'administrateur) avec une réponse http conforme à ce tutoriel par http://www.wunderkraut.com/ 1 et les nœuds sans index par les robots d'exploration sont gérés. par le module no-index Node . Cela fonctionnera même si vous n’avez pas de relation de noeud paret-enfant. Lien vers le tutoriel:

Pinueve
la source
4

Dans Drupal 7, il devrait également être possible d'utiliser hook_node_access () . Il s'agit d'un hook normal dans D7 pouvant être mis en œuvre par tous les modules pour tous les types de nœuds. Ensuite, vous pouvez refuser l'accès si l'utilisateur tente 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 vérification pour masquer le nœud dans les résultats de la 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 constructeur de requêtes.

Berdir
la source
3

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

Comme vous le remarquez, il est recommandé de créer un type de contenu personnalisé pour ces nœuds "fantômes" et d'indiquer à pathauto de leur donner des URL spécifiques (i use /dev/null/[title-raw];): même si le nœud n'est pas publié, il aura son propre alias d'URL, Ainsi, dans votre exemple, si vous créez d'abord le nœud fantôme 'à propos de nous', puis la page d'affichage 'à propos de nous', l'URL de la seconde sera example.com/about-us-0parce que celle-ci example.com/about-usa été extraite de celle fantôme (toutefois, vous pouvez définir les chemins manuellement).

Strae
la source
3

Vous pouvez utiliser n’importe quel type de système d’accès aux nœuds et utiliser view3. Dans ce cas, vous ne pouvez pas désactiver la réécriture SQL sur les paramètres de la requête. Vous pouvez donc désactiver le système d'accès aux noeuds dans cette vue.

Daniel Wehner
la source
3

Vous pouvez le faire en utilisant les modules de règles.
+ Créer une nouvelle règle avec l'événement "Le contenu est visualisé".
+ Ajoutez quelques conditions, par exemple: L'utilisateur a le (s) rôle (s): anonymous, Path a l'URL alias: node / xyz (il s'agit du nœud que vous souhaitez limiter pour l'utilisateur anonyme). N'oubliez pas d'ajouter la condition "et" ou "ou" si nécessaire.
+ Créer une action pour rediriger vers une autre page ou faire 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" } } ]
 }
}
Stone Vo
la source
2

Je pense que le moyen le plus simple d'accomplir ce que vous voulez est d'utiliser le gestionnaire de pages (Ctools), c'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)

Nicolas_ii
la source
2

Le module d' accès au contenu répondra parfaitement à vos besoins.

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

Il possède également une bonne documentation pour vous aider à démarrer.

AjitS
la source
2

Si vos noeuds « contenu inclus » doivent rester inaccessibles, puis envisager de bloquer / node / * sur le serveur Web « location = / node / * » niveau . Par défaut, refuser l'accès à tous les nœuds. Par défaut, autoriser l'accès aux noeuds ayant reçu un chemin auto-chemin tel que / pages.

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

Vous ne pouvez jamais garantir qu'un nœud ne deviendra pas accessible via un module contributif installé ultérieurement ou dont vous ne comprenez pas encore la totalité. (Résultats de la recherche, listes, vues par défaut, vue d'ensemble des catégories de taxonomie ...)

C'est à quoi 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 éventuellement touché par Google.

    Parce que les moteurs de recherche ne s'appuient pas uniquement sur des araignées de liens. Ils évaluent également les commentaires du navigateur, etc. Aucun module robot.txt, ni 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érer si "le contenu à inclure" doit réellement ê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 / ..., vous courez un risque beaucoup moins grand qu’il soit jamais répertorié, ou ne s'affiche jamais sous forme de page avec une URL automatique. Je ne sais pas encore. (pages d'aperçu de taxonomie, recherche, vues ...)

utilisateur18099
la source
0

Le module Vue de la page Limiter le noeud fait exactement ce que vous voulez.

De la description du module:

Avez-vous déjà utilisé un type de noeud de diaporama dont vous avez besoin pour être publié mais ne souhaitez pas que le noeud soit accessible par lui-même en utilisant ensuite le chemin node / XXX? Ce module est pour vous!

Avec ce module, vous pouvez limiter l'accès au fullmode d'affichage du nœud , de sorte que vous ne pouvez pas accéder au nœud sur node/XXX.

Jdrupal
la source