Best way to implement a 404 in ASP.NET
Handle this in your Global.asax's OnError event:
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"); } }}
In you error page, you should ensure that you're setting the status code correctly:
// 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.NotFoundResponse.StatusCode = 404;Response.StatusDescription = "Page not found";
You can also handle the various other error codes in here quite nicely.
Google will generally follow the 302, and then honour the 404 status code - so you need to make sure that you return that on your error page.
You can use the web.config to send 404 errors to a custom page.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors>