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 使用严格; 打印“”; 打印“”; 打印“抱歉链接失效了,但是这个页面不在这里!
"; 打印“”; 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?
尝试访问损坏的图片 url 时抛出内部服务器错误 500 而不是 404
Spring Boot Web 应用程序给出 500 内部服务器错误,而不是 404 未找到