为什么Page Not Found的处理不一样

在Administer>>Site configuration>>Error reporting页面中,将404页面指向一个自己定制的页面。

通常情况下,如果某个页面没有找到,将显示这个定制的页面,查看HTTP消息头,返回的状态码是404 Not Found,说明是正确的。

但是,假设有一个中文页面却没有对应的英文页面,使用浏览器加载了中文页面后,然后切换语言,显示定制的404页面,但是,HTTP返回码却是200 OK,这是不正确的。语言切换功能我是选用了Translations for Content,而不是Language switcher(Interface only),做语言切换时,某个程序模块自动将url中的路径的前缀进行了改变,估计找不到改变后的URL时就指向了定制的404页面。

发现后一种情况没有在log中记录page not found,估计没有调用drupal_not_found()函数。

为什么会这样?这样对SEO来说是好还是不好?

新发现

通过查看中英文双语切换的超链接,可以断定这两个超链接指向哪个页面是双语模块在展现当前页面时即时计算出来的。如果一个页面只有中文内容,没有英文内容,在计算语言切换超链接时,找不到英文页面,所以指向了定制的404页面。当浏览器点击这个链接时,这是一个正常的下载页面操作,所以返回HTTP 200 ok