【问题标题】:How do you detect what page caused the Internal Server Error?您如何检测导致内部服务器错误的页面?
【发布时间】:2011-03-14 09:55:16
【问题描述】:

所以,在我的 .htaccess 文件中,我有以下 ErrorDocument 行:

ErrorDocument 500 http://www.example.com/500

由于我的服务器从同一个核心文件运行多个网站,我只想将 所有 内部服务器错误重定向到同一个处理页面。但是,我的问题是它不会发送有关导致错误的页面的任何信息,它会重定向页面。我尝试将其更改为ErrorDocument 500 index.php?500,但这只会在尝试定位文件时导致第二个内部服务器错误。关于如何成功地将其重定向到我的自定义 500 错误页面并仍然获取有关首先导致错误的页面的信息的任何想法?

【问题讨论】:

  • 您要处理什么?调用者页面信息有什么用?
  • 这是错误页面,但是当您在前面包含 http 时,Apache 会重定向到该页面,而不是停留在发生错误的 URL,因此没有关于错误的数据。

标签: php .htaccess redirect http-referer


【解决方案1】:

在您的 ErrorDocument 语句中,您提供了一个远程页面的 URL。结果,Apache 向用户发送了一个 Location 标头,然后用户就愉快地离开了。

改为将 URL 更改为将处理错误的本地脚本的绝对路径:

ErrorDocument 500 /500.php

脚本应该使用一组以 REDIRECT_ 开头的环境变量启动,其中应该包含错误中涉及的各种路径和查询字符串。

没有办法既将用户发送到其他地方,又在 ErrorDocument 本身中捕获信息。另一方面,如果您出于某种原因仍想以这种方式处理它,您的脚本可以捕获信息然后重定向用户。

【讨论】:

    【解决方案2】:

    您始终可以查看 http 请求的 referrer 字段以确定调用者之前位于哪个 URL

    【讨论】:

      【解决方案3】:

      检查您的网络服务器的访问日志。在那里您将能够看到导致 500 响应代码的请求。

      在 Apache(使用默认日志格式)中,成功的请求(200 OK)可能如下所示:

      127.0.0.1 - - [19/Jul/2010:18:25:54 +0200] "GET / HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"
      

      导致 500 的请求可能如下所示:

      127.0.0.1 - - [19/Jul/2010:18:24:37 +0200] "GET / HTTP/1.1" 500 631 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"
      

      响应码在第六列。

      您还可以检查您的 PHP 错误日志,假设您已启用错误日志记录(您应该),该日志将包含所有 PHP 错误。

      【讨论】:

      • 我不想在事后检测到它,我希望 PHP 在那里检测到它并用它做我自己的处理。
      【解决方案4】:

      您的 apache 服务器记录每个错误发生(尽管它是可配置的)。您可以在 PHP 网站中使用 FileStream 打开和管理此文件。请参阅http://httpd.apache.org/docs/2.2/logs.html 以了解有关 Apache 日志文件的更多信息。您可以从 http://www.freewebmasterhelp.com/tutorials/htaccess/ 获取有关 .htaccess 的教程。

      要进行自己的处理,请创建一个像 error.php 这样的 PHP 文件来处理您的错误。您可以使用 .htaccess 文件重定向它。之后,如果您想转到某个页面,可以使用header() 方法来实现。

      【讨论】:

        猜你喜欢
        • 2014-11-26
        • 1970-01-01
        • 2015-11-23
        • 2013-08-11
        • 2012-03-29
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多