2011-05-23 24 views
11

Estoy construyendo un nuevo sitio con páginas de error personalizadas. Configuré mi web.config y configuré todas mis páginas.Errores personalizados del servidor web IIS7: funciona en local pero no cuando se publica en producción

Cuando ejecuto localmente, y fuerzo los errores (la página no encontrada es la más fácil), todo funciona bien. Pero cuando publico en mi servidor de producción de Windows Server 2008 R2 e ingreso una página incorrecta, todavía me lleva a la página de error predeterminada de IIS7.

Aquí es una muestra de mi web.config (y mis páginas son todo lo que hay):

<?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> 

¿Estoy haciendo algo simple incorrectamente? ¿Es una diferencia con Windows Server 2008 R2?

EDIT: He encontrado el problema, que es información adicional en el archivo web.config, al tener este aspecto:

<?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> 

Respuesta

19

De manera predeterminada, IIS7 intercepta códigos de estado HTTP como 4xx y 5xx generados por aplicaciones que se encuentran más arriba en la canalización.

Se puede decir IIS para pasar sólo a través de la respuesta existente sin reemplazarlo con su propia página de error:

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

Para obtener más información, véase:

HTTP Errors <httpErrors>

0

hace esto help?

Me pregunto si también debe registrar las rutas a los errores personalizados de esa manera también.

Cuestiones relacionadas