.net IIS7自定义404未显示

.net IIS7自定义404未显示,.net,iis-7,http-status-code-404,.net,Iis 7,Http Status Code 404,使用集成的.net 4.0应用程序池创建了一个新的IIS7网站 以.aspx结尾的URL会显示自定义404,其他任何内容都会显示蓝色的服务器错误页面 “HTTP错误404.0-找不到 您正在查找的资源已被删除、名称已更改或暂时不可用。“ (因此与IE无关) .Net错误页面没有显示任何内容,尽管我在其中有一个条目 问题1:对于一个全新的asp.net 4 iis7站点,我需要采取哪些步骤才能为每个404结果创建一个自定义的.net错误页面 问题2:.net处理程序为什么只适用于.aspx文件而不

使用集成的.net 4.0应用程序池创建了一个新的IIS7网站

以.aspx结尾的URL会显示自定义404,其他任何内容都会显示蓝色的服务器错误页面 “HTTP错误404.0-找不到 您正在查找的资源已被删除、名称已更改或暂时不可用。“ (因此与IE无关)

.Net错误页面没有显示任何内容,尽管我在其中有一个条目

问题1:对于一个全新的asp.net 4 iis7站点,我需要采取哪些步骤才能为每个404结果创建一个自定义的.net错误页面

问题2:.net处理程序为什么只适用于.aspx文件而不适用于其他文件

注意:在服务器级别设置404,然后appcmd命令在路径中显示自定义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自定义错误

这对.aspx和非.aspx请求都有效

奇怪的是,在我调查过的任何博客帖子和答案中都没有出现这种组合,我只是幸运地尝试了一下


<httpErrors existingResponse="PassThrough" />
在IIS 7(Windows Server 2008 R2)中为我工作

我的问题是我的web.config中有这个,但是在一个
中。将其移动到根目录下
修复了它

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

...
...

对于IIS7之后的版本,根据rob的回答,仅使用httpErrors:

另外,除非您需要/想要使用ASP.NET来呈现错误页面,否则我建议您使用静态HTML文件来删除对ASP.NET的依赖关系。只需确保省略任何前导正斜杠,并对路径的其余部分使用反斜杠,例如

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


设置
responseMode=“File”
以保留正确的状态代码。

我的web应用程序出现此问题,我通过注释重定向行解决了此问题:

    <httpErrors>
        <remove statusCode="403" subStatusCode="-1" />
        <!--<error statusCode="403" prefixLanguageFilePath="" path="C:\inetpub\redirectSItoHttps.htm" responseMode="File" />-->
    </httpErrors>


在IIS上,AllowAbsolutionPathSwhendeleged(在配置编辑器-->system.webServer/httpErrors上)被锁定,我无法将值false更改为true。

感谢您发布此答案-这让我看起来好像知道自己在做什么!:)但愿我能多投几次。谢谢你的帮助!。。。另外值得一提的是,我在这篇文章中注意到,“path”部分不应该以“~”开头,谢谢-当通过IIS进行设置时,它不会在httpError元素上设置属性。这是微软的失败!为什么他们会把它放进去而不记录它?如果你在上面有自定义错误,那么使用@mhenry1384的答案解决我问题的关键是添加
existingResponse=“Replace”errorMode=“Custom”
httpErrors节点的属性。您能发布整个
web.config
吗,这样我们就可以看到您在说什么了?啊,对不起。我很想提供帮助,但我不再使用.NET,也无法访问我的旧代码。感谢您将httpErrors元素放在web.config的上下文中,以便我们知道该放在哪里。这可能是对原始答案的评论。事后看来,您可能是对的。当时我觉得我的观点很有意义,有理由提出一个新的答案。
<httpErrors existingResponse="PassThrough" />
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    ...
    <system.webServer>
        ...
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>
<error statusCode="404" prefixLanguageFilePath="" path="pages\404.html" responseMode="File" />
    <httpErrors>
        <remove statusCode="403" subStatusCode="-1" />
        <!--<error statusCode="403" prefixLanguageFilePath="" path="C:\inetpub\redirectSItoHttps.htm" responseMode="File" />-->
    </httpErrors>