我使用下面的web.config代码将请求重定向到缺失页面到404错误处理页面:
<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
当我查找诸如“missing.aspx”之类的页面时它工作正常,但它不适用于没有“.aspx”扩展名的页面,例如“missing.asp”或只是“缺失”。如果它不起作用,它只会加载一个标准的IIS 7.5错误页面。
我做错了什么?我正在使用.net 4.我注意到其他人提出同样的问题,但他们没有得到答案。
谢谢!
答案 0 :(得分:9)
正如dbaseman所述,这是因为没有为nonasp.net文件调用asp.net处理程序。强制asp.net处理程序对所有请求进行操作的简单方法是在web.config中设置以下内容。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</system.webServer>
这告诉IIS为所有请求运行所有托管模块,例如.html,.jpg,.css,.js等。这通常不赞成,因为它只是引入了额外的处理和延迟。
尝试的另一个选项(比上面更干净)在这里作为答案发布:https://stackoverflow.com/a/6661699/701062
答案 1 :(得分:4)
原因是非ASPX扩展从未进入ASP.NET处理程序;您看到的那些错误来自IIS。在web.config中的 system.webServer 下有一个单独的 httpErrors 部分,您需要配置它来处理这些错误。有关详细信息,请参阅here。
链接中的示例:
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="500" />
<error statusCode="500"
prefixLanguageFilePath="C:\Contoso\Content\errors"
path="500.htm" />
</httpErrors>
</system.webServer>
</configuration>
答案 2 :(得分:1)
将以下内容添加到 Web.config:
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
<remove statusCode="404" />
<error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
</httpErrors>
</system.webServer>
我拿了 Osprey 的代码,并添加了 responseMode="Redirect" 来解决只显示页面源代码的问题。