11

I am building a new site with custom error pages. I have setup my web.config, and have all of my pages setup.

When I run locally, and force errors (page not found is the easy one), it all works well. But when I publish to my Windows Server 2008 R2 production server, and enter a bad page, it still takes me to the default IIS7 error page.

Here is a sample from my web.config (and my pages are all there):

<?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.0"/> <customErrors mode="On" defaultRedirect="~/ErrorGeneral"> <error statusCode="400" redirect="~/ErrorBadRequest" /> <error statusCode="401" redirect="~/ErrorUnathorized" /> <error statusCode="402" redirect="~/ErrorPaymentRequired" /> <error statusCode="403" redirect="~/ErrorForbidden" /> <error statusCode="404" redirect="~/ErrorItemNotFound" /> <error statusCode="405" redirect="~/ErrorMethodNotAllowed" /> <error statusCode="406" redirect="~/ErrorNotAcceptable" /> <error statusCode="412" redirect="~/ErrorPreconditionFailed" /> <error statusCode="500" redirect="~/ErrorInternalServerError" /> <error statusCode="501" redirect="~/ErrorNotImplemented" /> <error statusCode="502" redirect="~/ErrorBadGateway" /> </customErrors> </system.web> </configuration> 

Am I doing something simple incorrectly? Is it a difference with Windows Server 2008 R2?

EDIT: I found the issue, which is additional information in the web.config file, to look like this:

<?xml version="1.0" encoding="UTF-8"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <customErrors mode="On" defaultRedirect="~/ErrorGeneral"> <error statusCode="400" redirect="~/ErrorBadRequest" /> <error statusCode="401" redirect="~/ErrorUnathorized" /> <error statusCode="402" redirect="~/ErrorPaymentRequired" /> <error statusCode="403" redirect="~/ErrorForbidden" /> <error statusCode="404" redirect="~/ErrorItemNotFound" /> <error statusCode="405" redirect="~/ErrorMethodNotAllowed" /> <error statusCode="406" redirect="~/ErrorNotAcceptable" /> <error statusCode="412" redirect="~/ErrorPreconditionFailed" /> <error statusCode="500" redirect="~/ErrorInternalServerError" /> <error statusCode="501" redirect="~/ErrorNotImplemented" /> <error statusCode="502" redirect="~/ErrorBadGateway" /> </customErrors> </system.web> <system.webServer> <httpErrors> <remove statusCode="502" subStatusCode="-1" /> <remove statusCode="501" subStatusCode="-1" /> <remove statusCode="500" subStatusCode="-1" /> <remove statusCode="412" subStatusCode="-1" /> <remove statusCode="406" subStatusCode="-1" /> <remove statusCode="405" subStatusCode="-1" /> <remove statusCode="403" subStatusCode="-1" /> <remove statusCode="401" subStatusCode="-1" /> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="/Pages/ErrorItemNotFound.aspx" responseMode="ExecuteURL" /> <error statusCode="401" prefixLanguageFilePath="" path="/Pages/ErrorUnauthorized.aspx" responseMode="ExecuteURL" /> <error statusCode="403" prefixLanguageFilePath="" path="/Pages/ErrorForbidden.aspx" responseMode="ExecuteURL" /> <error statusCode="405" prefixLanguageFilePath="" path="/Pages/ErrorMethodNotAllowed.aspx" responseMode="ExecuteURL" /> <error statusCode="406" prefixLanguageFilePath="" path="/Pages/ErrorNotAcceptable.aspx" responseMode="ExecuteURL" /> <error statusCode="412" prefixLanguageFilePath="" path="/Pages/ErrorPreconditionFailed.aspx" responseMode="ExecuteURL" /> <error statusCode="500" prefixLanguageFilePath="" path="/Pages/ErrorInternalServerError.aspx" responseMode="ExecuteURL" /> <error statusCode="501" prefixLanguageFilePath="" path="/Pages/ErrorNotImplemented.aspx" responseMode="ExecuteURL" /> <error statusCode="502" prefixLanguageFilePath="" path="/Pages/ErrorBadGateway.aspx" responseMode="ExecuteURL" /> </httpErrors> </system.webServer> </configuration> 

2 Answers 2

19

By default IIS7 intercepts HTTP status codes such as 4xx and 5xx generated by applications further up the pipeline.

You can tell IIS to just pass through the existing response without replacing it with its own error page:

<configuration> <system.webServer> <httpErrors existingResponse="PassThrough" /> </system.webServer> </configuration> 

For more information see:

HTTP Errors <httpErrors>

Sign up to request clarification or add additional context in comments.

Comments

0

Does this help?

I wonder if you also have to register the paths to the custom errors that way as well.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.