在我的.htaccess
我有
ErrorDocument 404 http://foo.com/404.html
它可以工作,因为我可以从任何文件未找到错误中恢复并显示 404 页面,但它的工作方式是使用 301 将错误的 URI 重定向到我的404.html
页面。
这很糟糕,因为搜索引擎和爬虫最终不会看到 404 代码,而是 301 代码,并且不会从其索引中清除已删除的页面。
我可以让 Apache 在出现文件未找到错误时提供此 404 页面的内容,但仍然返回 404 代码而不是 301 吗?
答案1
您应该尝试使用绝对路径或相对路径,而不是 URL
我的apache2.conf:
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
答案2
不要指向外部 URL
语法是,
ErrorDocument <3-digit-code> <action>
可以采取的行动是,
- 要显示的文本。使用引号 (") 将文本括起来。
- 要重定向到的外部 URL。
- 重定向到的本地 URL。
指向外部 URL 将导致实际重定向,而使用本地 URL 是内部的。
因此,要呈现文件的内容,只需指向它,例如:
ErrorDocument 404 /404.html
使用正确的状态代码
这很糟糕,因为搜索引擎和爬虫最终不会看到 404 代码,而是 301 代码,并且不会从索引中清除已删除的页面。
如果页面用过的存在,现在不存在,正确的响应代码是410 已消失. 410 是表示“嘿,那不存在”的代码,而 404 只会在多次尝试访问现在不存在的页面后才会被理解。
答案3
对 Maxence 和 AD7six 的答案的评论(我在 serverfaul 上没有足够的声誉,而且 stack exchange 声誉显然不算数):
我刚刚用这种方式解决了这个问题,但是由于 URL 仍然是用户尝试调用的 URL,因此包含的图片和样式丢失了。
解决方案是在 404 文档的头部添加一个基本标签,例如
ErrorDocument 404
或者使用带有或不带有协议/域名的绝对 URL。