2010-12-20 21 views
10

En mi sitio web de ASP.NET 3.5 que se publica en el proveedor de alojamiento compartido, he configurado mi archivo web.config como esto:¿Por qué la configuración de customErrors en web.config no funciona en este caso?

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> 
     <error statusCode="403" redirect="AccessDenied.htm"/> 
     <error statusCode="404" redirect="FileNotFound.htm"/> 
    </customErrors> 

Si las páginas de solicitud de usuario que no existen (como "www .example.com/NotExistPage.aspx "), el usuario será redirigido a la página FileNotFound.htm como esperamos.

Pero si la solicitud del usuario alguna dirección como: "www.example.com/NotExistDirectory" sin extensión .aspx, el usuario se encontrará con IIS 7.5 página de error:

HTTP Error 404.0 - no se encuentra El recurso que busca ha sido eliminado, tuvo su nombre cambiado, o es no está disponible temporalmente.

Detialed información de error:

Module IIS Web Core 
Notification MapRequestHandler 
Handler StaticFile 
Error Code 0x80070002 

Requested URL http://www.example.com:80/NotExistDirectory 
Physical Path D:\Websites\example\example.com\wwwroot\NotExistDirectory 
Logon Method Anonymous 
Logon User Anonymous 

Esta es una página de color amarillo que no es fácil de usar y que no esperábamos.

Me pregunto si configurar customeError en webconfig no es compatible con este tipo de dirección o no? ¿Cómo puedo evitar que los usuarios vean esta página amarilla?

Edit: Gracias a la respuesta de David, pero encontré el motivo real y la solución correcta. Por favor mira mi respuesta.

Respuesta

9

@Mostafa: I enfrentó exactamente el mismo problema. Me enteré de que no puede ser resuelto mediante la adición del siguiente al archivo web.config:

<system.webServer> 
    <httpErrors errorMode="Custom"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
    </system.webServer> 
+0

Gracias, esto funcionó para mí, me faltaba errorMode = "Custom" – Raver0124

+0

Para nuevos lectores, finalmente encontré el motivo real y la solución completa, Puede echar un vistazo a mi respuesta – Mostafa

+0

no funciona, obtengo Esta página xxx.com no se puede encontrar No se encontró ninguna página web para la dirección web: https: //xxx.com/aaaaa HTTP ERROR 404 – Toolkit

1

Esto se debe a que el módulo ASP.Net está configurado para manejar ciertas extensiones de archivo. IIS determina que .aspx debe ser manejado por el módulo ASP.Net y luego la sección customerrors en el web.config (y de hecho en la propia web.config) entra en acción.

Dado que ha solicitado una página ni siquiera configurada para ASP .Net, IIS lo maneja por sí mismo sin pasar la solicitud.

+0

cómo resolver este problema, me enfrento al mismo problema yo mismo? –

+2

http://www.braintrove.com/article/46/page/2 - Pruebe este artículo que explicará cómo configurar páginas personalizadas para IIS. Es posible que también desee actualizarse en la canalización de IIS. –

0

En primer lugar, url directorio debe poseer a una barra final, de lo contrario es simplemente un archivo sin extensión. www.mysite.com/NotExistDirectory/
En segundo lugar, el módulo IIS de ASP.net es solo un controlador para los tipos MIME ASP, por lo que el directorio es sobrante para el servidor web. En tercer lugar, customerror es parte de system.web es parte de la configuración de ASP.net
y httperror es parte de system.webserver es parte de la configuración de IIS.
Suponiendo que el módulo http está predeterminado en la configuración de IIS, httperror funcionará con un error personalizado para el directorio no existente.

0

Eso es interesante, después de un par de años, de repente descubro cuál es el problema.

Gracias a la solución @ David, pero la solución completa es la razón y como bramido:

Al establecer customErrors modo a "On" Es sólo funciona cuando tenemos una excepción en la aplicación ASP.NET, mientras que cuando estamos tratando para llegar a nonExistingdirectory O notExsitingStaticResouce, IIS renderiza el error 404 y no llega al tiempo de ejecución de asp.net y recibe el servidor directamente de IIS.

Así tenemos que añadir configuraiton para IIS como bramido en Web.config:

<system.webServer> 
    <httpErrors errorMode="Custom"> 
     <remove statusCode="404"/> 
     <error statusCode="404" path="~/404.html" responseMode="File" /> 
    </httpErrors> 
    <system.webServer> 

Es importante establecer responseMode a "File", lo contrario código de estado automáticamente pasarían de 404 a 200. Entonces, desde la perspectiva del cliente, no obtienen el código de estado 404 real.

Cuestiones relacionadas