如何隐藏不应从用户和搜索引擎直接访问的节点?


51

我发现有时候我的节点仅包含将在其他地方显示的内容,但不应直接查看。也就是说,没有人应该去节点/ 1234,但是节点1234中的内容应该显示在其他地方。例如,我使用视图创建带有选项卡式内容的关于页面。因此,有“关于我”,“关于我们”和“关于他们”页面。所有这些都使用视图在具有选项卡的单个页面中显示。因此,我不希望人们直接进入“关于我们”节点,因为那样他们就不会看到其他页面的选项卡。同时,我不想让Google给人们直接链接到该节点,我想限制访问权限,以便用户只能通过视图(即选项卡)来访问它。

因此,我需要限制对该节点的访问,将其从Drupal搜索结果中删除,并确保Google不会对其进行处理。有什么建议么?


我目前使用的是drupal 6,但如果6和7之间有所不同,我认为回答这两个问题将很有用
Chaulky 2011年

如果您只关心几个节点,为什么不将它们添加到robots.txt文件中以将其从Google搜索中排除呢?
Tangurena'3

这是一个普遍的误解。robots.txt不会阻止搜索引擎将您的网站编入索引,而是会阻止搜索引擎抓取您的网站。如果有人链接到您网站上的页面,则Google会跟踪该链接并为该页面建立索引。如果你想阻止索引你需要使用机器人元标记,即:<META NAME =“ROBOTS”值=“NOINDEX” />
勒内·

Answers:


28

对我来说,这听起来像是Panels模块的一个好用例,因为您可以创建将覆盖节点页面的面板,并可以设置面板的上下文,以确保用户看到您希望他们看到的页面以及面板页面的访问规则(如果需要)。有关更多详细信息,请参阅这篇关于do的文章。


这看起来完全可以完成我想要的事情,而且干净,简单……甚至附带了一个教程(很好的链接)!
Chaulky 2011年

与Rabbit Hole模块解决方案相比,这不是一个过大的杀伤力吗?这样做是否有其他好处呢?
马里奥·阿瓦德

1
@MarioAwad好吧,有一个兔子洞模块直到我回答这个问题一年后才出现。当时,Panels是最好的解决方案,如果有人已经安装了面板,我仍然认为这是最好的解决方案,否则,Rabbit Hole可能是一个更好的轻量级解决方案。
coderintherye13年

@nowarninglabel听起来不错。谢谢。也许您应该在答案中添加此说明,以使其更适合将来的用户。干杯。
马里奥·阿瓦德

33

兔子洞模块提供此功能。

Rabbit Hole是一个模块,它增加了控制在其自己的页面上查看实体时应该发生的情况的功能。

也许您有一种内容类型,它永远都不应显示在其自己的页面上,例如轮播中显示的图像内容类型。Rabbit Hole可以阻止通过node / xxx在其自己的页面上访问此节点。


现在有Drupal 6版本。
mpdonadio

优秀,干净,简单的解决方案。
jamix

1
不错,如果您只想防止直接访问content_type节点,那么它比面板模块(对于本用例)要好!
Larzan 2015年

13

一种选择可能是从不发布节点,但让使用者页面忽略其发布状态。因此,在您的示例中,“关于”视图可能只是忽略“关于-xxx”节点的发布状态。由于未发布节点,因此未经授权的用户无法访问它们,因此搜索引擎不应为它们建立索引。

另一种解决方案是使用hook_nodeapi('view')/ hook_node_view()实施来发布drupal_goto()drupal_access_denied()当未经授权的用户访问节点页面时。请注意,在很多情况下都使用hook_nodeapi()/ hook_node_view(),不仅在查看节点页面时使用。

hook_menu_alter()也可以用于更改节点页面的访问回调,以拒绝对隐藏节点的访问。

最好的办法可能不是基于硬节点ID进行过滤,而是使用节点上的自定义字段(使用CCK / Field API或自定义表)或存储在变量中的隐藏节点列表。


@ mongolity404好帖子,很好的信息。给了我一些其他想法。但是为什么要使用社区Wiki?
Chaulky 2011年

在有人感觉要为我建议的选项提供代码示例的情况下,我做了我的答案社区Wiki
Pierre Buyle

7

对于Drupal 7,Rabbit Hole提供了此功能。

Rabbit Hole是一个模块,它增加了控制在其自己的页面上查看en实体时应该发生的情况的功能。

通过提供多个选项来控制在其自己的页面上查看实体时应发生的情况,这可以起作用。你有能力

  1. 交付拒绝访问页面。

  2. 传送未找到的页面。

  3. 发出页面重定向到任何路径或外部URL。

  4. 或仅显示实体(常规行为)。

如何 :

启用Rabbit Hole节点子模块然后,我们将获得与Drupal CODE中的每种形式相关联的config部分


6

解决了。首先,我尝试了Pierre Buyle的答案,但是,如果您取消发布节点,将无法正确访问该节点,并且这些节点将变得无用。在我的情况下,我有父级和子级节点,只有子级节点(出于管理目的)才是隐藏的节点,不会被搜寻器索引。我与网页经理这样做是根据本tuturial所作的URL重定向(隐藏这些节点的所有用户,但管理员)与HTTP响应http://www.wunderkraut.com/ 1由履带和无索引节点是handleled按节点无索引模块。即使您没有paret-child节点关系,这也将起作用。 链接到教程:


4

在Drupal 7中,也应该可以使用hook_node_access(),这是D7中的普通钩子,可以由所有模块针对所有节点类型实现。然后,如果用户试图在自己的节点/ nid上查看该节点,则可以拒绝访问。

您可能还需要实现hook_query_node_access_alter()并在其中添加检查以将节点隐藏在搜索结果中。仅此一项就足够了,您不需要hook_node_access()。而且它甚至可以在D6中工作,因为您也可以在那里更改查询,但是由于使用了查询生成器,因此在D7中要容易得多。


3

只需将这些节点设置为“未发布”,然后在视图中添加过滤器“已发布的节点:否”。

如seo所述,这是为这些“幽灵”节点创建自定义内容类型,并告诉pathauto为它们提供特定网址的一种很好的做法(我使用/dev/null/[title-raw];):即使该节点未发布,它也会有自己的网址别名,因此,在您的示例中,如果您先创建“关于我们”的幽灵节点,然后创建“关于我们”的视图页面,则第二个URL将是example.com/about-us-0因为example.com/about-us从其中一个幽灵节点获取了(但是,您可以手动设置路径)


3

您可以使用任何类型的节点访问系统并使用views3。在那里您无法在查询设置上禁用sql重写,因此可以在此视图上禁用节点访问系统。


3

您可以使用规则模块来完成。
+使用“查看内容”事件创建新规则。
+例如,添加几个条件:用户的角色:匿名,路径的URL别名:node / xyz(这是您要限制匿名用户使用的节点)。请记住,如果需要,请添加“和”或“或”条件。
+创建动作以重定向到另一个页面或执行其他操作。这是我为您导出的示例代码

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

我认为最简单的方法是使用页面管理器(Ctools),它非常易于使用,您要做的就是指定要重定向到哪个节点(在这种情况下,从一个节点重定向到另一个节点)


2

内容访问模块将完全适合您的需求。

该模块允许您按角色和作者管理内容类型的权限。它允许您指定每种内容类型的自定义视图,编辑和删除权限。(可选)您可以启用每个内容访问设置,以便可以自定义每个内容节点的访问。

它还有一个很好的文档来帮助您入门。


2

如果您的“包含的内容”节点需要保持不可访问状态,请考虑在Web服务器 “位置= / node / *” 级别上阻止/ node / * 。默认拒绝访问所有/ nodes。默认情况下,允许访问接收到路径自动路径(例如/ pages)的节点。

(子目录的基本.htaccess密码也是阻止外部搜寻器意外搜索索引的一种不错的方法。)

您永远不能保证某个节点不会通过恰好将来安装的贡献模块或您尚未完全理解的模块访问。(搜索结果,列表,默认视图,分类类别概述...)

这就是节点的用途。

您“包含的内容”的隐私对您来说重要吗?如果是这样,那么...

  1. 所有具有网址的内容最终都会被Google击中。

    因为搜索引擎不仅仅依赖链接蜘蛛。他们还会评估浏览器的反馈等。没有robot.txt或pathauto,globalredirect,rabbithole模块可以帮助您安眠。如果可以访问该节点,那么它将被索引。也许通过您自己的浏览器/附件。

  2. 重新考虑“要包含的内容”是否真的应该是一个节点如果没有人应该以页面形式访问它

    如果您的“包含的内容”将存储在迷你面板/块/代码段/ bean / ...中,则您被列出或以带有自动URL的页面出现的风险要低得多还不知道。(分类概述页面,搜索,视图...)


0

限制节点页面视图”模块完全可以满足您的需求。

从模块描述:

您是否曾经使用过需要发布的幻灯片节点类型,但不希望节点本身可以​​使用node / XXX路径进行访问?该模块适合您!

使用此模块,您可以限制对节点的full查看模式的访问,因此您不能访问上的节点node/XXX

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.