在我的asp.net网站上,我在web.config文件中定义了以下自定义错误页面。
<customErrors mode="On" defaultRedirect="~/defaulterror.htm" >
<error statusCode="404" redirect="~/404.htm" />
当找不到文件时,它正确显示404.htm页面,但问题是当我进行Fiddler跟踪时它返回302作为HTTP状态代码。这是搜索引擎页面索引的一个大问题,因为这些链接断开了很多最近因为这个在我的网站上被编入索引。如何防止返回302作为文件未找到错误的HTTP状态代码,并返回404文件未找到错误。我使用的是asp.net 3.5。
答案 0 :(得分:17)
在谷歌搜索此问题后,似乎这是Microsoft ASP.NET为此情况提供的默认行为。这对SEO来说非常糟糕。我找到的解决方法是检查所请求的文件是否存在于HTTP处理程序(或global.asax文件)中,或使用:
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/FileNotFound.aspx" />
</customErrors>
如果请求的文件不存在,则将请求路径重写为未找到文件的页面(如果使用HTTP处理程序或global.asax),清除404错误页面代码后面的服务器错误,并添加404手动错误标题,而不是等待服务器这样做。
Server.ClearError();
Response.Status = "404 Not Found";
Response.StatusCode = 404;
答案 1 :(得分:2)
在ASP.NET 4.0中,您可以使用redirectMode="ResponseRewrite"
发送漂亮的错误页面和正确的HTTP代码。
答案 2 :(得分:0)
您可能已经知道302响应用于通知呼叫者已将请求的资源移动到其他位置。
当你看到Fiddler中返回的302 http代码时,标题中还有一个“位置”声明?例如:
HTTP/1.1 302 Found
Location: http://www.yoursite.com/somewhere/blah.htm
似乎你可能在网络服务器上有'某事'拦截404返回并用302替换它们。我知道这不是很多,但我建议您查看该站点的IIS配置。
答案 3 :(得分:0)
如果您将以下内容添加到404页面代码中。您将获得正确的结果 -
第404.aspx页
protected void Page_Load(object sender, EventArgs e)
{
Response.StatusCode = 404;
}
答案 4 :(得分:-2)