我可以使Apache ErrorDocument返回404而不是301?

在我的.htaccess我有

 ErrorDocument 404 http://foo.com/404.html 

它的工作原理,我从任何文件找不到错误恢复,并显示404页面,但它的工作方式是redirect错误的URI使用301到我的404.html页面。

这是不好的,因为search引擎和爬虫不会看到一个404代码,而是一个301代码,并不会从其索引中清除已删除的页面。

我可以让Apache提供这个404页面的内容文件没有发现错误,但仍然返回404代码而不是301?

你应该尝试使用绝对或相对path而不是URL

我的apache2.conf:

 ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html ErrorDocument 500 /error/500.html 

不要指向外部url

Apache的文档说 :

语法是,

 ErrorDocument <3-digit-code> <action> 

行动可以在哪里,

  • 要显示的文本。 用引号(“)来包装文本。
  • 要redirect到的外部url。
  • 要redirect到的本地URL。

指向外部url将导致实际的redirect,而使用本地url是内部的。

所以,要渲染一个文件的内容只需指向它,例如:

 ErrorDocument 404 /404.html 

为作业使用正确的状态码

这是不好的,因为search引擎和爬虫不会看到一个404代码,而是一个301代码, 并不会从其索引中清除已删除的页面

如果页面曾经存在,现在不存在,则正确的响应代码是410 Gone 。 410是代码说“嘿,这不存在”,而404只会意味着,经过多次尝试访问现在不存在的页面。

评论Maxence和AD7six的答案(我没有足够的信誉在serverfaul上,堆栈交换声誉并不显然):

我只是用这种方式解决了这个问题,但是由于URL仍然是用户尝试呼叫的URL,因此包含的图片和样式丢失了。

解决的办法是在404的代号头添加一个基本标签

 ErrorDocument 404 

或者使用带或不带协议/域名的绝对URL。