这些特定类型的节点可以由匿名用户或注册用户创建。如果注册用户创建它,一切正常。如果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]
答案 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 JOIN
将node
表加入users
表。如果node.uid
为0
且与user
没有匹配的uid = 0
记录,则会返回空集。
我认为在将数据库从一台服务器复制到另一台服务器时,我搞砸了我。我刚才无法复制它,但我知道我之前看到的问题是MySQL不会对0
字段中的auto_increment
感兴趣。在这种情况下,我的匿名用户记录为uid = 5
,所以我只是将其更改回0
,而且一切都与世界相符。