在我的.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
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。