Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IIS 404 Custom Error not working as expected

Tags:

asp.net

iis

iis-6

I'm working on IIS6, ASP.NET, VS2008. The web site uses a custom error handler to catch 404 errors and serve an alternate page. When presented with an url of the form:

http://srv/crimson/articles/index

Everything works perfectly. But an url of the form:

http://srv/crimson/blog.aspx

Where blog.aspx does not exist, fails with the following message:

Server Error in '/Crimson' Application. Description: HTTP 404...

When I try and debug, none of the breakpoints in my 404 handler are hit. So it appears that something is catching the request earlier. Where? And how to I get it to pass the request on to my handler?

Edit Thanks to those who answered, but none of those ideas worked. I've decided to attack the problem another way.

like image 639
Jon Avatar asked Mar 05 '09 17:03

Jon


2 Answers

You might wanna try this:

In IIS6:

  • open "properties" for your website
  • go to "home directory" tab
  • click on "configuration"
  • look for the extension ".aspx"
  • click on "edit"
  • check the checkbox which says "verify that file exists"

edit

And what about this: http://msdn.microsoft.com/en-us/library/h0hfz6fc(VS.80).aspx

<customErrors defaultRedirect="sorry.htm" mode="On">  
     <error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>

Since 'RemoteOnly' specifies that custom errors are shown only to the remote clients, and that ASP.NET errors are shown to the local host.

like image 191
Roel Snetselaar Avatar answered Sep 28 '22 15:09

Roel Snetselaar


hmm, Assaf is right, but to add to his answer I need to post some code.

Yes, Assaf does mean something else ASP.NET offers it's own error handling, configured through the web.config. You can either manage this through the IIS Admin snap in, or directly in the web.config file.

Within the <system.web> element you should have:

<customErrors defaultRedirect="sorry.htm" mode="RemoteOnly">
  <error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>

You can configure a different page for each HTTP error code, or let the default redirect handle them all.

You'll find that you do indeed need to set these error pages up in both the IIS custom errors and the ASP.NET configuration, as otherwise you'll end up in this situation - some pages go to your 404, and others use a default that you've not customised.

You should also make sure that your custom 404 page actually returns a 404 header to ensure that search engines etc treat it correctly.

Response.StatusCode = 404;
Response.StatusDescription = "Not found";
like image 25
Zhaph - Ben Duguid Avatar answered Sep 28 '22 17:09

Zhaph - Ben Duguid