我正在尝试确定在标准ASP.NET Web应用程序中实现404页面的最佳方法.我目前在Global.asax文件中的Application_Error事件中捕获404错误,并重定向到友好的404.aspx页面.问题是请求看到302重定向,然后缺少404页面.有没有办法绕过重定向并使用包含友好错误消息的立即404进行响应?
Googlebot等网络抓取工具是否关心非现有页面的请求是否返回302后跟404?
在Global.asax的OnError事件中处理此问题:
protected void Application_Error(object sender, EventArgs e){ // An error has occured on a .Net page. var serverError = Server.GetLastError() as HttpException; if (serverError != null){ if (serverError.GetHttpCode() == 404){ Server.ClearError(); Server.Transfer("/Errors/404.aspx"); } } }
在您的错误页面中,您应该确保正确设置状态代码:
// If you're running under IIS 7 in Integrated mode set use this line to override // IIS errors: Response.TrySkipIisCustomErrors = true; // Set status code and message; you could also use the HttpStatusCode enum: // System.Net.HttpStatusCode.NotFound Response.StatusCode = 404; Response.StatusDescription = "Page not found";
你也可以很好地处理这里的各种其他错误代码.
Google通常会遵循302,然后尊重404状态代码 - 因此您需要确保在错误页面上返回该状态代码.
您可以使用web.config将404错误发送到自定义页面.