asp.net - net - Acceso a la URL original en la página de redireccionamiento IIS7 404
url rewrite iis examples (1)
Sí, es posible obtener la URL que causa el error 404, solo necesita asegurarse de que IIS esté configurado correctamente.
Hay dos casos que debe manejar, uno es donde el error proviene de una página .aspx u otra que se maneja con .NET, y el otro es donde el error proviene de una carpeta incorrecta (como en su pregunta, http://example.com/testurl
) o nombre de archivo (por ejemplo, * .htm) que no es manejado por .NET. En IIS 7, deberá configurar un error 404 personalizado en "Páginas de error de .NET" en la sección "ASP.NET" de su aplicación web, y también en "Páginas de error" en la sección "IIS". Los cambios de web.config terminan pareciéndose a esto:
<system.web>
<!-- other system.web stuff -->
<customErrors defaultRedirect="/Error404.aspx" mode="On" redirectMode="ResponseRewrite">
<error redirect="/Error404.aspx" statusCode="404" />
</customErrors>
</system.web>
<system.webServer>
<!-- other system.webServer stuff -->
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Error404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Nota: el redirectMode = "ResponseRewrite" enumerado anteriormente es importante si desea que sus páginas 404 realmente devuelvan mensajes 404 y no creo que se pueda configurar a través de IIS.
En mi ejemplo, creé una página llamada Error404.aspx para manejar todos los errores 404. Cuando una página .NET (.aspx, etc.) lanza una excepción 404, el nombre de archivo original se puede encontrar en la variable de cadena de consulta aspxerrorpath. Cuando un htm normal u otra página causa un error 404, la ruta original se puede leer desde la propiedad Request.RawUrl. Usé el siguiente código en mi página Error404.aspx para manejar cualquiera de los casos:
public partial class Error404 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OriginalUrl = Request.QueryString["aspxerrorpath"] ?? Request.RawUrl;
Server.ClearError();
Response.Status = "404 not found";
Response.StatusCode = 404;
}
public string OriginalUrl { get; private set; }
}
De forma predeterminada, la página de error 404 no devolverá un código de estado 404, por lo que debe configurarlo manualmente. Vea esta publicación para más detalles.
Tengo una página .aspx como mi página 404 personalizada en un sitio configurado en IIS 7. Necesito recuperar la URL original a la que el usuario intentaba acceder para realizar algún procesamiento en la página 404. El truco es que debo manejar específicamente los 404 que no contienen una extensión .aspx (por ejemplo, http://example.com/testurl
), que no se enrutan a través de la sección de errores personalizados de ASP.NET. ¿Puedo configurar IIS para que apunte a mi 404 personalizado, pero en ese momento no sé cómo obtener mi URL original? ¿Alguien sabe si esto es posible?
Gracias,
Micro