IIS7自定义404不显示

使用Intergrated .net 4.0应用程序池创build了一个新的IIS7网站。

以.aspx结尾的URL显示自定义404其他任何东西都会显示蓝色服务器错误页面HTTP错误404.0 – 未find您正在查找的资源已被删除,名称已更改或暂时不可用。 (所以与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> 

也试过了

 <httpErrors existingResponse="PassThrough" /> 

但这只是一个空洞的回应。

我只find了一个有关执行appcmd来testing自定义httperror handling的参考,但这里是结果。

 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> 

这是奇怪的,因为在iis7pipe理器错误页面显示

 404 /pages/404.aspx Execute URL Local 

.Net错误页面什么也没有显示,虽然我在那里有一个条目。

问题1:我需要采取什么步骤来完成一个全新的asp.net 4 iis7网站,为每个404结果都有一个自定义的.net错误页面?

问题2:.net处理程序为什么对.aspx文件起作用?

注意:在服务器级别设置404,然后appcmd命令在path中显示自定义404,但对网站未能显示404没有任何影响。

所以我猜这是一个红鲱鱼。

答案是使用

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

并没有任何system.web customErrors

这适用于.aspx和非.aspx请求。

奇怪这个组合没有出现在我调查的任何博客post和计算器的答案,这只是运气,我试了一下。

 <httpErrors existingResponse="PassThrough" /> 

在IIS 7(Windows Server 2008 R2)中为我工作。

我的问题是我有我的web.config中,但在一个<location> 。 将它移动到根目录<system.webServer>修复它。

 <?xml version="1.0" encoding="utf-8"?> <configuration> ... <system.webServer> ... <httpErrors existingResponse="PassThrough" /> </system.webServer> </configuration> 

对于IIS7以上版本,只能使用httpErrors,按照rob的回答: https ://stackoverflow.com/a/6661699

只要添加,除非你需要/想要使用ASP.NET来呈现你的错误页面,我会build议使用静态HTML文件,以消除对ASP.NET的依赖。 只要确保省略任何前导斜杠,并为path的其余部分使用反斜杠,例如

 <error statusCode="404" prefixLanguageFilePath="" path="pages\404.html" responseMode="File" /> 

设置responseMode="File"保留正确的状态码。