404错误页面的奇怪问题

Posted

技术标签:

【中文标题】404错误页面的奇怪问题【英文标题】:Strange issue with 404 error pages 【发布时间】:2012-08-02 14:47:43 【问题描述】:

我有一个使用自定义 404 错误页面的网站设置。这似乎适用于大多数页面。

事实上,我有两个不同的错误页面想要显示,现在还有第三个是我刚刚发现的。

此页面不存在,它显示了在找不到页面时应显示的正确错误页面。这显示了在我的 .htaccess 文件中配置的错误页面: http://www.canadiancommuter.com/wontfindthis.php

如果有人试图访问数据库中不再存在的旧文章,则会从我的 PHP 代码生成此错误页面: http://www.canadiancommuter.com/2334054466-some+old+article.html

但是,此链接也会生成 404 错误,但会显示不同的错误页面(通常包括广告): http://www.canadiancommuter.com/2012062500-TTC+asks+Ministry+of+Labour+to+treat+CNE+like+Rolling+Stones+concert%2FCaribana.html

我知道这个 URL 不起作用的原因。我故意向它添加字符以使其返回 404 错误。我的问题是我无法弄清楚其他 404 错误页面来自何处。

它不在我的 .htaccess 文件中,我的 .htaccess 文件中的错误页面可以在上面的第一个链接中看到。

它不在我的代码中。代码本身生成的唯一错误页面可以在上面的第二个链接中看到。

它可能来自的唯一其他地方是我的域名注册商和我的网络主机。

该域是通过一个注册商注册的,但指向我在另一个提供商处的托管帐户。注册商说,因为我只是将我的域的 DNS 指向我们的虚拟主机,所以错误页面不会来自他们,而是来自我的虚拟主机。

我的网络主机说这个错误页面不是来自他们,但必须在我的代码中。

我已经大量修改了用于该站点的所有代码,因此我非常确信错误页面不是来自那里。

有没有人知道我应该在哪里寻找这个错误页面?

(请注意,我不确定注册商或网络主机是否完全确定他们在说什么,所以我不排除他们中的任何一个是此页面的来源。但是,一个对两者的管理控制台进行彻底查看并没有发现任何结果。)

【问题讨论】:

另外,我想指出这是第二个网站,它与我的另一个网站使用相同的托管帐户。我从未在我的其他网站上看到过这些错误页面。除了内容之外,这两个站点的唯一不同之处在于我遇到问题的域是通过不同的注册商注册的,而我的另一个域是通过我的网络托管服务提供商注册的。此页面是否可能来自我的域名注册商? (即使他们基本上只是将我的域指向我的网络主机?) 我想补充的另一件事是,这只发生在 url 由 apache 重写的网站的一部分上。在网站的其他部分,网址中的 % 会导致“400 错误请求”错误,但在被重写的区域中,它会显示 404 错误页面,我找不到它的位置。 【参考方案1】:

这绝对来自您的主机提供商!

当 %2F 在 url 中给出时,nginx 无法将其作为错误处理(这可能是一个错误!)并且它会显示您主机的默认错误页面,您可以在同一服务器上托管的其他网站上看到相同的错误您的网站:

http://aias-uic.org/not-found.html http://halfdrawn.com/not-found.html http://flyingmantis.com/not%2Ffound.html ...

还有许多其他网站与您的网站在同一台服务器上! (你可以检查他们的IP确定)

最后一个使用自定义错误页面,所以使用 %2F 会显示神秘的错误页面!

您也可以暂时禁用您的自定义错误页面,您可能会得到神秘的错误页面!

【讨论】:

经过一番研究,我相信你是正确的。如果您选择不设置自定义错误页面,主机 iPage 实际上有一个选项。有一个选项可以在“非自定义错误页面”上禁用广告。因此,即使设置了自定义错误页面并禁用了广告,这个特定的错误页面仍然与广告相同。我现在正在与房东讨论,看看他们是否有办法从他们的通用错误页面中删除广告。由于他们的所有客户都是付费客户,因此在通用页面上展示广告似乎并不合适。在其他可以禁用它们的地方,很好。 我还有一个很简单的问题。当你转到我原帖的第三个链接时,得到默认错误页面,上面有广告吗?我正在尝试确定显示的广告是否由我的主机放置,或者可能是我的计算机上的某种广告软件这样做。 @SherwinFlight - 当我转到该页面时,我得到一个空白页面,因为我安装了 AdBlock Plus。在页面的源代码中,我可以看到它在<iframe> 中加载了来自dsnextgen.com 的页面,其中包括Google 广告。 正如 Shaquin 所说,它显示来自 Google 广告的广告,并且内容是从 dsnextgen.com 加载的页面 谢谢!我试图确定广告是否真的在那个页面上,或者来自我电脑上的广告软件。好像是房东在放这些广告。【参考方案2】:

您的页面正在通过运行 cloudflare-nginx 的代理提供服务,这可能会捕获一些 404 错误,因为 /%2F 形式的斜杠会导致提供不同的 404 页面。

您是否有一个 .htaccess 规则来捕获所有可能的 404 错误,而不仅仅是那些与您的文件名方案匹配的错误?如果没有,请尝试设置一个。您也可以尝试在本地服务器实例中运行该站点,并查看 404 页面的行为是否符合预期。

编辑是因为我错误地将Transfer-encoding: chunked产生的字符误认为是配置错误造成的

【讨论】:

在我的 .htaccess 文件中,我以这种格式设置了 404 错误:ErrorDocument 404 /404page.php 我知道 / 和 % 字符会导致出现不同的 404 错误页面,并且我试图找出原因。 CloudFlare 基本上是一种缓存服务,并且不会像所讨论的那样创建自己的自定义错误页面。而且我很确定我将其设置为仅缓存 CSS 和图像文件等静态资源,而不是整个页面。所以这不仅仅是某种缓存错误页面问题。 如果在 .htaccess 文件中包含完整的 URL(包括 FQDN)会怎样?当然,你不应该这样做 - 我只是好奇它是否会有所作为。 它什么也没做。我尝试从 .htaccess 文件中完全删除错误页面,虽然我的自定义错误页面停止显示,但我询问的错误页面继续显示。 我自己快速浏览了一下,两组页面都是通过 nginx/varnish 提供的。如果不是您的 htaccess,很可能一切都来自主机。是%2f 导致了问题。将其更改为/,您会得到更糟糕的结果(您的 htaccess 规则正在为丢失的 png 文件等返回整页内容)【参考方案3】:

如果(正如您已经确定的那样)您的代码没有生成错误页面,那么“神秘”404 页面来自默认的网络服务器配置(可能由您的托管服务提供商控制)或 间接 来自您的 DNS 服务(例如,如果您的网络服务器将您的浏览器重定向到未注册的域,那么您可能会被重定向到邀请您购买它的页面)。

IMO 跟踪此问题的最直接方法是使用配备了跟踪重定向机制的浏览器(例如,安装了 Firebug 扩展的 Firefox)。如果错误页面确实来自您的域(而不是拼写错误),则暗示默认的网络服务器配置(因此可能是您的托管服务提供商)。

编辑: 重新阅读以上内容,我意识到我应该澄清一下:您的 DNS 服务不能简单地将您“重定向”到某个地方。如果您发现在浏览器中输入不存在的域会将您重定向到带有广告的页面,那么您可以相当确定是您的网络连接提供商正在检查您的 HTTP 请求,并进行 DNS 查找在幕后代表您,并重定向您。

【讨论】:

澄清一下,我的 DNS 的意思是,我拥有一个由一个提供商提供的域,并由另一个提供商托管。所以我的域只是指向我的网络托管帐户。 这不是 ISP 将不存在的页面重定向到另一个页面的情况,就像有时那样。我没有为任何其他网站获得这样的页面。 另外,我确定这些页面来自我的域。如果您在该页面上看到广告,则我的域位于顶部。将该域复制并粘贴到地址栏中会将您带到我的网站,因此不会拼写错误。

以上是关于404错误页面的奇怪问题的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 3.8.1 类别第 2 页错误 404 未找到 / 自定义帖子类型

WordPress 中自定义 wp_query 的分页需要 404 错误页面

如何使用页面应用程序中的自定义页面更改默认的 404 错误页面

404错误页面会给网站造成什么影响?

Codeigniter 日志中出现奇怪的 404 错误

404错误了该怎么办?