Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
465 views
in Technique[技术] by (71.8m points)

configuration - IIS7 web server custom errors - works on local but not when published to production

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>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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>


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...