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

Posted

技术标签:

【中文标题】Apache:返回 404 错误而不是 500 错误【英文标题】:Apache: return 404 errors instead of 500 errors 【发布时间】:2010-11-04 01:56:43 【问题描述】:

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

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

我找到了这个

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

这让我相信你可以改变发生在不同错误上的情况。像这样的东西会很棒

ErrorDocument 404 /cgi-bin/error404.cgi

ErrorDocument 500 /cgi-bin/error404.cgi

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

【问题讨论】:

ErrorDocument 指令更改显示给用户的消息,但它们不影响服务器在后台向浏览器报告的状态代码。您是否只想向用户隐藏“500 错误”消息(在这种情况下就足够了),或者您实际上是否希望完全阻止服务器向浏览器报告 500,而不管用户看到什么? 我也希望这样做,无论是使用 ErrorDocument 还是其他一些 Apache 解决方案 【参考方案1】:

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

#!/usr/bin/perl 使用严格; 打印“”; 打印“”; 打印“404 错误!”; 打印“”; 打印“”; print "

抱歉链接失效了,但是这个页面不在这里!

"; 打印“”; print "点击这里返回上一页。"; 退出(0);

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

【讨论】:

这里有两个问题:首先,没有理由这需要是 CGI 脚本。 ErrorDocument 指令的目标可以是网络服务器上的任何文件,包括纯 HTML。第二:虽然这会对用户“404 错误”,但当用作 500 错误的 ErrorDocument 时,它仍会向 Web 浏览器返回 500 的 HTTP 状态代码。 是的,我需要一个 400 错误返回给浏览器,而不仅仅是一个不同的页面返回给用户。感谢您的尝试。【参考方案2】:

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

【讨论】:

是的,它基本上是一个非常临时的解决方案。这是一个我无权修复某些旧代码的错误。新代码将在一个月内替换它,但同时我需要一组当前报告 500 错误的页面返回 404。

以上是关于Apache:返回 404 错误而不是 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法强制 apache 返回 404 而不是 403?

Swagger必需的参数在缺少时返回500,而不是404

尝试访问损坏的图片 url 时抛出内部服务器错误 500 而不是 404

Spring Boot Web 应用程序给出 500 内部服务器错误,而不是 404 未找到

如何在 PHP 错误上设置 Apache HTTP 503 错误代码而不是 HTTP 500

500:非 uuid 类型而不是 404