Apache:返回 404 个错误而不是 500 个错误

Apache: return 404 errors instead of 500 errors

提问人:Dave 提问时间:6/19/2009 更新时间:6/19/2009 访问量:2012

问:

在 apache 中,每当我收到 404 错误时,我都想返回 500 错误。

我知道这是一个非常奇怪的用例,但我想知道它是否可能。

我找到了这个

http://www.4webhelp.net/tutorials/misc/errors.php

这让我相信你可以改变不同错误所发生的情况。这样的事情会很棒

错误文档 404 /cgi-bin/error404.cgi

错误文档 500 /cgi-bin/error404.cgi

正如文章所建议的,但我似乎没有在我的 Ubuntu 安装上error404.cgi。知道我在哪里可以得到它,或者替代解决方案吗?

Apache http-status-code-404 错误报告

评论

0赞 Tyler McHenry 6/19/2009
ErrorDocument 指令更改向用户显示的消息,但不会影响服务器在后台向浏览器报告的状态代码。您只是想向用户隐藏“500 错误”消息(在这种情况下,这就足够了),还是实际上想要完全阻止服务器向浏览器报告 500,而不管用户看到了什么?
0赞 jlewkovich 7/8/2016
我也希望这样做,无论是使用还是其他Apache解决方案ErrorDocument

答:

0赞 Mentalikryst 6/19/2009 #1

你必须创造error404.cgi。转到 /usr/lib/cgi-bin,然后创建一个名为 error404.cgi 的文件,它应该是 Perl(默认),或者如果启用了 Python,则可以使用其中任何一个。如果你不懂 Python 或 Perl,这里有一个基本的 Perl 脚本,它应该适合你:(你可以从我的网站下载脚本,网址为 cwarren.uuuq.com/downloads/perl/404.pl

#!/usr/bin/perl
use strict;
print "<html>";
print "<head>";
print "<title>404 ERROR!</title>";
print "</head>";
print "<body>";
print "<h1>Sorry for the broken link, but this page is not here!</h1>";
print "<br><br>";
print "<a href=\"javascript:history.go(-1)\">Click here to go back to the previous page.</a>";
exit(0);

另一种选择是将链接更改为 /var/www/404.html 或其他东西。

评论

4赞 Tyler McHenry 6/19/2009
这里有两个问题:首先,没有理由认为这需要CGI脚本。ErrorDocument 指令的目标可以是 Web 服务器上的任何文件,包括纯 HTML。第二:虽然这会对用户“404 错误”,但当用作 500 错误的 ErrorDocument 时,它仍然会向 Web 浏览器返回 HTTP 状态代码 500。
1赞 Dave 6/19/2009
是的,我需要将 400 错误返回给浏览器,而不仅仅是返回给用户的不同页面。感谢您的尝试。
1赞 Ryan Guill 6/19/2009 #2

我知道这不能回答你的问题,但你确定你真的想这样做吗?500 错误和 404 是截然不同的东西,旨在用于不同的目的。您告诉用户他们拥有的 url 是错误的,而实际上这很可能是您的应用程序/服务器的临时问题。为什么你宁愿这样做,而不是告诉用户有一个暂时的问题,他们应该稍后再试?或者换句话说,为什么不有一个自定义的 500 错误页面呢?

评论

0赞 Dave 6/19/2009
是的,这基本上是一个非常临时的解决方案。这是一个错误,我无力修复一些旧代码。新代码将在一个月内替换它,但与此同时,我需要一组当前报告 500 错误的页面来返回 404。