2011-04-30 16 views
6

Estoy a punto de realizar una reescritura y rediseño/reestructuración importante de un sitio web existente que recibe mucho tráfico. He estado utilizando el Módulo de reescritura Url de IIS 7 para permitir URLs sin extensión y amigables para SEO, así como para redirigir las solicitudes de páginas antiguas a páginas apropiadas en la nueva estructura del sitio. Ha estado yendo bien, pero estoy buscando cómo configurar una página 404 personalizada y estoy bloqueado. Hasta ahora, he creado el código siguiente en el nodo del web.config:Página personalizada 404 al usar el Módulo de reescritura Url de IIS 7

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" prefixLanguageFilePath="" path="/404.htm" responseMode="ExecuteURL" /> 
</httpErrors> 

Lo que pasa es que funciona, pero no del todo! Si voy a una URL inexistente, me sirven mi página 404 personalizada, pero la solicitud obtiene un código de estado 200 OK en respuesta en lugar del 404. 40 deseado. He jugueteado con varios atributos del nodo httpErrors pero no tuve suerte. . ¿Alguien sabe cómo mostrar la página 404 personalizada Y devolver un código de estado 404 real?

Gracias!

Respuesta

3

Para conseguir nuestro 404 personalizada de trabajo manipulador, tuvimos que hacer lo siguiente:

<customErrors defaultRedirect="ErrorPage.aspx" mode="On"> 
     <error statusCode="500" redirect="ErrorPage.aspx" /> 
     <error statusCode="404" redirect="/404.aspx" /> 
     <error statusCode="403" redirect="ErrorPage.aspx" /> 
    </customErrors> 

Y

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

De hecho, creo me encontré con el mismo problema, en el que se especifica sólo el uno tipo de error Puede que esto no funcione para las extensiones sin extensión, pero espero que te coloque en el camino correcto.

+0

gracias por su respuesta. Ya había intentado algo similar a lo que sugirió y volví a visitarlo. Puede que me esté perdiendo algo, pero incluso con esos elementos configurados, todavía veía 200 en lugar de 404. Tal vez sea todo un tema sin extensión, como dijiste, no estoy seguro. Finalmente implementé una solución y estoy estableciendo explícitamente el código de estado de respuesta en 404 en el evento Page_Init de la página 404 ASPX. Se siente raro, pero lo tomaré por ahora. Si alguien más tiene una solución más elegante, házmelo saber. ¡Gracias! – drewta

+0

@drewta, probablemente haya alguna configuración de IIS que especifique que IIS envíe todo el tráfico al tiempo de ejecución de ASP.NET cuando no haya extensión. Por ejemplo, tuve que especificar que todo el CFM (el sitio web antiguo era un sitio de fusión en frío) debería ir a ASP.NET para que mi controlador 404 personalizado pudiera manejarlo. Pasé cerca de 10 minutos intentando extenderme sin extensión antes de renunciar debido a limitaciones de tiempo. Buena suerte. –

+0

esta configuración cambiará la URL actual cuando se haya lanzado una excepción – xiaoyifang

1

Esto funcionó para mí, en el código detrás de la 404.aspx:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.Response.StatusCode = 404; 
     this.Response.StatusDescription = "Not Found"; 
     this.Response.TrySkipIisCustomErrors = true; 
    } 
Cuestiones relacionadas