2

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

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

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

4

4 回答 4

3

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

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

ErrorDocument 500 /500.php

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

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

于 2010-07-19T18:48:34.203 回答
1

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

于 2010-07-19T19:01:50.670 回答
0

检查您的网络服务器的访问日志。在那里,您将能够看到导致 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 错误。

于 2010-07-19T16:27:36.497 回答
0

您的 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()方法来做到这一点。

于 2010-07-20T14:36:27.883 回答