WordPress 网站出现 404 错误,但只有启用了友好错误消息的 IE 才会出现此错误

WordPress 网站出现 404 错误,但只有启用了友好错误消息的 IE 才会出现此错误

我在任何链接上都收到 404 页面未找到错误(80% 的时间)http://doubleabody.com/,但仅适用于 IE 浏览器,并且仅当“友好错误消息”处于打开状态时才会出现。进入 IE 设置并关闭“友好错误消息”,问题不会再次出现。再次打开“友好错误消息”,问题会再次出现,但只有 80% 的时间会出现。除了 IE,其他浏览器都没有这个问题。到目前为止,我们在 IE8 和 IE9 中看到了这个问题。

我说的 80% 的时间,是指我在清除浏览器历史记录和缓存后单击链接,并在 IE 中收到 404 消息。但随后刷新 4 次,页面突然正常显示。关闭“友好错误消息”,问题又回来了。我们在多种类型的 Windows 上都看到了这种情况(XP、Vista、Windows 7、Ubuntu Linux 上的 VM 中的 Windows Server 2008)。

此外,这只是大约 2 周前出现的问题。几个月来,该网站在 a2hosting.com 上运行良好。到目前为止,a2hosting.com 仍在排除故障,他们也无法找出问题所在。

这是一个使用 Pods CMS 加载的 WordPress 网站。除了 Pods CMS 之外,没有其他插件。我构建了一个自定义 WordPress 主题,然后使用 Pods CMS API 提取内容进行显示。这将其从博客转变为小型企业网站。

该网站的.htaccess 也是常规的 WordPress 版本。

更新1

根据 @JeffAlbert 的请求,我展示了当我在 IE8 浏览器中遇到 404 时错误日志的内容。这是当我点击主页上的“/map”链接时发生的。(请注意,我已更改 IP 地址以保护我的工作站。)请注意,第一次尝试失败。第二次尝试成功。

50.0.0.0 - - [25/Mar/2011:00:56:51 -0400] "GET /map HTTP/1.1" 404 9082 "http://doubleabody.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"
50.0.0.0 - - [25/Mar/2011:00:56:59 -0400] "GET /map HTTP/1.1" 404 9216 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"

现在,当我在 IE8 中关闭“友好错误消息”的情况下再次单击 /map 时,会发生以下情况,它始终正常显示:

50.0.0.0 - - [25/Mar/2011:01:03:19 -0400] "GET /map HTTP/1.1" 404 9216 "http://doubleabody.com/liftgates" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"

这是我在 Ubuntu Linux 上使用 Google Chrome 时的结果,它可以正常工作:

50.0.0.0 - - [25/Mar/2011:01:07:20 -0400] "GET /about HTTP/1.1" 404 11801 "http://doubleabody.com/map" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16"

答案1

我在 WordPress 中编写了一个自定义主题。它的工作方式是抓取与网站的所有连接并将其发送到主题的 index.php 文件。然后,它将调用 WordPress 的 get_header()、get_sidebar()、显示内容,然后是 get_footer()——标准的 WordPress 内容。

但奇怪的是,日志反映的是 404 状态。因此,在我的 index.php 中,我将第一行写成这样:

标头('HTTP / 1.1 200 OK');

此时,Apache 日志不再显示 404,而是 200。现在 IE 中的问题不再出现。

所以,这就是我从这个问题中得出的推测。显然,IE 自诞生以来就一直忽略 404 条件。但上周,显然我推测微软为 IE7、IE8 和 IE9 引入了系统更新,导致它在 404 状态标头上立即停止,即使有效内容返回也是如此。通过我强制通过主题使用 200 标头,IE 不再看到 404 而看到 200。因此,没有错误。

答案2

即兴猜测:客户端可访问的 DNS 不好。测试方法:确认您的 Web 服务器访问日志中是否确实看到任何客户端返回 404 错误;如果没有,那么请求根本就没有到达您的 Web 服务器,您应该开始查看 DNS(从您域的权威来源开始)或客户端的实际网络连接问题。

如果您确实看到返回了实际的 404,则您的客户端尝试加载的路径可能会让您很好地了解导致问题的原因。希望对您有所帮助!

相关内容