IIS7 Web 服务器自定义错误 - 适用于本地但不适用于发布到生产环境 [英] IIS7 web server custom errors - works on local but not when published to production

查看:18
本文介绍了IIS7 Web 服务器自定义错误 - 适用于本地但不适用于发布到生产环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个带有自定义错误页面的新站点.我已经设置了我的 web.config,并设置了我的所有页面.

当我在本地运行并强制出错(找不到页面是最简单的)时,一切正常.但是当我发布到我的 Windows Server 2008 R2 生产服务器,并进入一个错误页面时,它仍然带我到默认的 IIS7 错误页面.

这是我的 web.config 中的一个示例(我的页面都在那里):

<!--有关如何配置 ASP.NET 应用程序的更多信息,请访问http://go.microsoft.com/fwlink/?LinkId=169433--><配置><system.web><编译调试="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></配置>

我是否做错了一些简单的事情?与 Windows Server 2008 R2 有区别吗?

我发现问题是 web.config 文件中的附加信息,如下所示:

解决方案

默认情况下,IIS7 会拦截 HTTP 状态代码,例如管道上游应用程序生成的 4xx 和 5xx.

您可以告诉 IIS 只传递现有的响应,而不用自己的错误页面替换它:

<预><代码><配置><system.webServer><httpErrors existingResponse="PassThrough"/></system.webServer></配置>

有关更多信息,请参阅:

<块引用>

HTTP 错误 <httpErrors>

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>

解决方案

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>

这篇关于IIS7 Web 服务器自定义错误 - 适用于本地但不适用于发布到生产环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆