Como ocultar nós que não devem ser acessados ​​diretamente de usuários e mecanismos de pesquisa?

51

Descobri que às vezes tenho um nó que simplesmente contém conteúdo que será exibido em outro lugar, mas não deve ser visualizado diretamente. Ou seja, ninguém nunca deve ir para o nó / 1234, mas o conteúdo no nó 1234 deve ser exibido em outro lugar. Por exemplo, eu crio uma página sobre com conteúdo com guias usando visualizações. Portanto, existem páginas "Sobre mim", "Sobre nós" e "Sobre eles". Tudo isso é exibido em uma única página com guias usando Exibições. Portanto, não quero que as pessoas acessem diretamente o nó "Sobre nós", porque não verão as guias das outras páginas. Ao mesmo tempo, não quero que o Google forneça às pessoas um link direto para esse nó, quero limitar o acesso para que os usuários possam acessá-lo apenas através da exibição (por exemplo, a guia).

Portanto, preciso restringir o acesso ao nó, removê-lo dos resultados da pesquisa do Drupal e garantir que o Google não o atenda. Alguma sugestão?

Chaulky
fonte
Atualmente estou usando o Drupal 6, mas se é diferente entre 6 e 7, eu acho que seria útil para responder por ambos
Chaulky
Se você está preocupado com apenas alguns nós, por que não adicioná-los ao arquivo robots.txt para excluí-los das pesquisas do Google?
Tangurena 5/03/11
Este é um equívoco comum. O robots.txt não impede que os mecanismos de pesquisa indexem seu site, impede que os mecanismos de pesquisa rastreiem seu site. Se alguém criar um link para uma página do seu site, o Google seguirá o link e indexará a página, se desejar. Se você deseja impedir a indexação, use a metatag ROBOTS, ou seja: <meta name = "ROBOTS" value = "NOINDEX" />
René

Respostas:

28

Isso me parece um bom caso de uso para o módulo Painéis, porque você pode criar painéis que substituirão as páginas dos nós e definir o contexto do painel de forma a garantir que os usuários vejam a página que deseja que eles vejam, bem como regras de acesso para as páginas do painel, se você precisar delas. Para mais detalhes, consulte esta postagem em do

coderintherye
fonte
isso parece fazer exatamente o que eu quero, e de uma maneira limpa e simples ... até vem com um tutorial (link legal) !!
Chaulky
Não é um exagero comparado à solução do módulo Rabbit Hole? Existem benefícios extras para isso que a tornam a resposta escolhida?
Mario Awad 29/10
11
@MarioAwad Bem, para um, o módulo Rabbit Hole nem existia até mais de um ano depois que eu respondi a essa pergunta. Na época, os painéis eram a melhor solução, ainda acho que é a melhor solução se alguém já tiver painéis instalados; caso contrário, o Rabbit Hole pode ser uma solução leve e melhor.
Codigointherye 30/10
@nowarninglabel Parece uma boa dica. Obrigado. Talvez você deva adicionar esse esclarecimento à resposta para torná-lo melhor para os futuros participantes. Felicidades.
Mario Awad 30/10
33

O módulo Rabbit Hole fornece esse recurso.

Rabbit Hole é um módulo que adiciona a capacidade de controlar o que deve acontecer quando uma entidade está sendo visualizada em sua própria página.

Talvez você tenha um tipo de conteúdo que nunca deve ser exibido em sua própria página, como um tipo de conteúdo de imagem exibido em um carrossel. O Rabbit Hole pode impedir que esse nó seja acessível em sua própria página, através do node / xxx.

Pierre Buyle
fonte
Agora existe uma versão do Drupal 6.
mpdonadio
Excelente, uma solução limpa e simples.
Jamix 14/05
11
Bom, este é melhor que o módulo panel (para este caso de uso) se você quiser apenas impedir o acesso direto a um nó content_type, pois somente isso!
Larzan 23/01
13

Uma opção pode ser nunca publicar o nó, mas fazer com que a página do consumidor ignore seu status de publicação. Portanto, no seu exemplo, a visualização "Sobre" pode ignorar o status de publicação dos nós "Sobre xxx". Como os nós não são publicados, o usuário não autorizado não pode acessá-los e não deve ser indexado pelo mecanismo de pesquisa.

Outra solução é usar uma hook_nodeapi('view')/ hook_node_view()implementação para emitir uma drupal_goto()ou drupal_access_denied()quando a página do nó for visitada por um usuário não autorizado. Esteja ciente de que hook_nodeapi()/ hook_node_view()são usados ​​em muitos casos e não apenas ao visualizar uma página de nó.

hook_menu_alter()também pode ser usado para alterar o retorno de chamada de acesso das páginas do nó para negar o acesso aos nós ocultos .

Provavelmente, o melhor é não basear a filtragem no ID do nó codificado, mas usar um campo personalizado no nó (usando a API CCK / Field ou uma tabela personalizada) ou uma lista de nós ocultos armazenados em uma variável .

Pierre Buyle
fonte
@ mongolity404 bom post, boas informações. Deu-me ideias para outras coisas. Mas por que wiki da comunidade?
Chaulky
Eu fiz a minha resposta wiki comunidade nas sente caso de alguém como fornecer amostra de código para as opções que eu sugeri ...
Pierre Buyle
7

Para o Drupal 7, a toca do coelho fornece esse recurso.

Rabbit Hole é um módulo que adiciona a capacidade de controlar o que deve acontecer quando uma entidade estiver sendo visualizada em sua própria página.

Isso funciona fornecendo várias opções para controlar o que deve acontecer quando a entidade está sendo visualizada em sua própria página. Você tem a capacidade de

  1. Entregue uma página de acesso negado.

  2. Entregar uma página não encontrada.

  3. Emita um redirecionamento de página para qualquer caminho ou URL externo.

  4. Ou simplesmente exiba a entidade (comportamento regular).

Como :

Ativar o submódulo de nós Rabbit Hole Então obteremos a seção de configuração associada a todos os formulários no Drupal CODE

niksmac
fonte
6

Resolvido. Primeiro, tentei a resposta de Pierre Buyle, mas se você cancelar a publicação de um nó, ele não poderá ser acessado adequadamente e esses nós se tornarão inúteis. No meu caso, eu tenho nós pais e filhos, apenas os nós filhos (para fins de administração) são os que devem ser ocultados e NÃO ser indexados pelos rastreadores. O que fiz com o gerenciador de páginas fez um redirecionamento de URL (ocultando esses nós para todos os usuários, exceto o administrador) com uma resposta http de acordo com este tutorial de http://www.wunderkraut.com/ 1 e os nós sem índice dos rastreadores são manipulados à mão pelo módulo no-index do Node . Isso funcionará mesmo se você não tiver uma relação de nó pareto-filho. Link para o tutorial:

pinueve
fonte
4

No Drupal 7, também deve ser possível usar hook_node_access () , este é um gancho normal no D7 que pode ser implementado por todos os módulos para todos os tipos de nós. Em seguida, você pode negar o acesso se o usuário estiver tentando visualizar o nó em seu próprio nó / nid.

Você provavelmente também precisará implementar hook_query_node_access_alter () e adicionar uma verificação lá para ocultar o nó nos resultados da pesquisa. Isso pode até ser suficiente por si só e você não precisa de hook_node_access (). E pode até funcionar no D6, porque você também pode alterar a consulta, mas é muito mais fácil no D7, devido ao construtor de consultas.

Berdir
fonte
3

Simplesmente defina esses nós como 'não publicados' e, na visualização, adicione o filtro 'nó publicado: não'.

Como seo, é uma boa prática criar um tipo de conteúdo personalizado para esses nós 'fantasmas' e dizer ao pathauto para fornecer URLs específicos (eu uso /dev/null/[title-raw];): mesmo que o nó não seja publicado, ele terá seu próprio alias de URL, portanto, no seu exemplo, se você criar primeiro o nó fantasma 'sobre nós' e, em seguida, a página de exibição 'sobre nós', o URL do segundo será example.com/about-us-0porque o URL fantasma example.com/about-usfoi retirado do nó fantasma (no entanto, você pode definir os caminhos manualmente)

Strae
fonte
3

Você pode usar qualquer tipo de sistema de acesso ao nó e usar views3. Lá, você não pode desativar a reescrita do sql nas configurações da consulta e, portanto, pode desativar o sistema de acesso ao nó nesta exibição.

Daniel Wehner
fonte
3

Você pode fazer isso usando os módulos de regras.
+ Crie uma nova regra com o evento "O conteúdo é visualizado".
+ Adicione algumas condições, por exemplo: O usuário tem papéis: anônimo, o caminho possui o alias da URL: node / xyz (este é o nó que você deseja limitar para o usuário anônimo). Lembre-se de adicionar as condições "e" ou "ou", se necessário.
+ Crie uma ação para redirecionar para outra página ou faça outra coisa. Este é o código de amostra que eu exportei para você

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

Eu acho que a maneira mais fácil de realizar o que você deseja é usar o Gerenciador de páginas (Ctools), é realmente simples de usar, tudo o que você precisa fazer é especificar qual nó redirecionar para onde (neste caso, de um nó para outro)

Nicolas_ii
fonte
2

O módulo Content Access atenderá perfeitamente às suas necessidades.

Este módulo permite gerenciar permissões para tipos de conteúdo por função e autor. Ele permite que você especifique a visualização personalizada, edite e exclua permissões para cada tipo de conteúdo. Opcionalmente, você pode ativar as configurações de acesso por conteúdo, para personalizar o acesso para cada nó de conteúdo.

Ele também possui uma boa documentação para ajudá-lo a começar.

AjitS
fonte
2

Se os nós de "conteúdo incluído" precisa ficar inacessível, então considerar o bloqueio * no / node / webserver "location = / node / *" nível . O padrão nega acesso a todos / nós. O padrão permite o acesso aos nós que receberam um caminho auto-caminho como / páginas.

(A senha .htaccess básica para subdiretórios é uma maneira decente de bloquear a indexação acidental de pesquisa por rastreadores externos também.)

Você nunca pode garantir que um nó não ficará acessível por meio de um módulo contribuído que será instalado no futuro ou de um que você ainda não entenda completamente. (Resultados da pesquisa, listagens, visualizações padrão, visão geral da categoria de taxonomia ...)

É para isso que servem os nós.

A privacidade do seu "conteúdo incluído" é importante para você? Se sim, então ...

  1. Tudo o que tiver um URL será atingido pelo Google.

    Porque os mecanismos de pesquisa não contam apenas com aranhas de link. Eles também avaliam o feedback do navegador etc. Nenhum robô.txt, ou módulo pathauto, globalredirect, rabbithole ajudará você a dormir em paz. Se o nó puder ser acessado, ele será indexado. Talvez pelo seu próprio navegador / addons.

  2. Reconsidere se "o conteúdo a ser incluído" deve realmente ser um nó , se ninguém deve acessá-lo como uma página ?

    Se o seu "conteúdo incluído" for armazenado dentro de um minipainel / bloco / snippet / bean / ..., você corre um risco muito menor de ser listado ou de aparecer como uma página com um URL automático ainda não conhece . (páginas de visão geral da taxonomia, pesquisa, visualizações ...)

user18099
fonte
0

O módulo Restringir exibição de página de nó faz exatamente o que você deseja.

Na descrição do módulo:

Você já usou um tipo de nó de apresentação de slides que precisa ser publicado, mas não deseja que o nó seja acessível por si só usando o caminho node / XXX? Este módulo é para você!

Com este módulo, você pode restringir o acesso ao fullmodo de visualização do nó , para que não possa acessar o nó node/XXX.

Jdrupal
fonte