.net - resource - IIS7 personalizado 404 no se muestra
iis http 404 (4)
creó un nuevo sitio web de IIS7 con un grupo de aplicaciones .net 4.0 integrado.
Las URL que terminan con .aspx muestran 404 personalizadas. Cualquier otra cosa proporciona la página de error del servidor azul "Error HTTP 404.0 - No encontrado. El recurso que está buscando se eliminó, se cambió su nombre o no está disponible temporalmente". (así que nada que ver con IE)
<customErrors redirectMode="ResponseRewrite" mode="On" defaultRedirect="/pages/404.aspx" />
</system.web>
<system.webServer>
<httpErrors >
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
también trató
<httpErrors existingResponse="PassThrough" />
pero eso solo resultó en una respuesta vacía.
Solo he encontrado una referencia a la utilidad de ejecutar appcmd para probar el manejo de errores http personalizado, pero aquí están los resultados.
C:/Windows/System32/inetsrv>appcmd list config "http://mysite/file.notexist" -section:httpErrors
<system.webServer>
<httpErrors>
<error statusCode="401" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%SystemDrive%/inetpub/custer
r" path="502.htm" />
</httpErrors>
</system.webServer>
lo cual es extraño porque en el administrador iis7 se muestran las páginas de error
404 /pages/404.aspx Execute URL Local
Las páginas de error de .Net no muestran nada, aunque sí tenía una entrada allí.
Pregunta 1: ¿qué pasos debo seguir para que un sitio asp .net 4 iis7 completamente nuevo tenga una página de error .net personalizada para cada resultado 404?
Pregunta 2: ¿por qué funciona el controlador .net para archivos .aspx y nada más?
nota: establezca el 404 a nivel de servidor y el comando appcmd luego mostró el 404 personalizado en la ruta, pero no hizo ninguna diferencia en el sitio al no mostrar 404.
Así que supongo que es una pista falsa.
Para IIS7 en adelante, vaya solo con httpErrors, según la respuesta de rob: share
Solo para agregar, a menos que necesite / quiera usar ASP.NET para representar su página de error, recomendaría usar archivos HTML estáticos para eliminar la dependencia de ASP.NET. Solo asegúrese de omitir cualquier barra diagonal hacia delante y use barras diagonales inversas para el resto de la ruta, por ejemplo
<error statusCode="404" prefixLanguageFilePath="" path="pages/404.html" responseMode="File" />
Establezca responseMode="File"
para conservar el código de estado correcto.
Tenía este problema con mi aplicación web y lo resolví comentando la línea de redirección:
<httpErrors>
<remove statusCode="403" subStatusCode="-1" />
<!--<error statusCode="403" prefixLanguageFilePath="" path="C:/inetpub/redirectSItoHttps.htm" responseMode="File" />-->
</httpErrors>
En IIS, el allowAbsolutePathsWhenDelegated (en Configuration Editor -> system.webServer / httpErrors) estaba bloqueado y no puedo cambiar el valor de falso a verdadero.
la respuesta fue usar
<httpErrors existingResponse="Replace" errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx?he" responseMode="ExecuteURL" />
</httpErrors>
y no tener ningún system.web customErrors
esto funcionó para las solicitudes .aspx y no .aspx.
Curiosamente, esta combinación no apareció en ninguna de las publicaciones del blog y las respuestas de que había investigado, fue solo la suerte que lo probé.
<httpErrors existingResponse="PassThrough" />
Trabajó para mí en IIS 7 (Windows Server 2008 R2).
Mi problema fue que tuve esto en mi web.config, pero en una <location>
. Moverlo a la raíz <system.webServer>
arregló.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<system.webServer>
...
<httpErrors existingResponse="PassThrough" />
</system.webServer>
</configuration>