Drupal 6:匿名创建的节点导致404

时间:2009-11-08 20:26:17

标签: drupal drupal-6 http-status-code-404

这些特定类型的节点可以由匿名用户或注册用户创建。如果注册用户创建它,一切正常。如果anon创建它,转到该节点的页面会导致404错误。

然而,节点显然存在。如果我在node表格中修改其条目并将其uid设置为0之外的其他内容,则一切正常。

为什么会这样?

此规则适用于所有节点类型,CCK生成和其他。如果我设置uid = 0,它会中断。如果我设置uid = 2(或任何其他数字不是0),它可以正常工作。

debug_print_backtrace()会产生这样的结果:

#0 drupal_not_found() called at [/home/sitename/public_html/sitename2/index.php:24]

4 个答案:

答案 0 :(得分:3)

我得到了完全相同的错误:

  

用户表中缺少用户uid = 0

错误发生在node.module node_load()函数内,因为您在节点和用户表之间有连接查询

答案 1 :(得分:1)

如果用户0(匿名)先前已创建某种内容类型的节点,并且稍后该内容类型的权限仅限于登录用户,则Drupal可能无法识别该节点。这也会导致404错误。

乍一看,似乎Drupal根本没有拿起或索引节点......他们只是走了。但是,在查看数据库时,节点确实存在。

在我的情况下,用户0中存在用户0,但是违规节点的用户ID为0.使用phpMyAdmin,我手动将uid更改为有效用户(0除外),Drupal识别节点一次试。

答案 2 :(得分:0)

我的第二个googletorps假设这很可能是由一些自定义/贡献模块引起的。

您可以通过暂时将$backtrace = debug_backtrace()放在common.inc中drupal_not_found()函数的顶部并使用调试器检查结果来查明有问题的代码。 (或者,您可以使用debug_print_backtrace()来打印跟踪而不是Drupal 404页面。)

跟踪将列出导致drupal_not_found()调用的函数调用(及其参数)。


问题更新后编辑(在index.php中发布404):

这非常奇怪/恼人,因为这意味着menu_execute_active_handler()无法确定匹配的drupal菜单/路径条目(通过依次调用menu_get_item())。路径/菜单确定逻辑根本不应该依赖于节点作者(除了可能涉及访问权限,但这应该只导致403,而不是404)。

所以我完全不知道可能导致这种情况的原因:/

您是否尝试关闭所贡献的模块,看看这是否会改变行为并确定违规者?

答案 3 :(得分:0)

这已经有几个月了,所以我相信你现在已经找到了一些东西。但是,既然我遇到了同样的问题,我就是为下一个寻找答案的人发布这个问题:

检查users表是否有匿名用户的条目 - 即uid字段为0的位置。

加载要显示的节点时,node_load()函数使用INNER JOINnode表加入users表。如果node.uid0且与user没有匹配的uid = 0记录,则会返回空集。

我认为在将数据库从一台服务器复制到另一台服务器时,我搞砸了我。我刚才无法复制它,但我知道我之前看到的问题是MySQL不会对0字段中的auto_increment感兴趣。在这种情况下,我的匿名用户记录为uid = 5,所以我只是将其更改回0,而且一切都与世界相符。