404重定向非aspx页面

时间:2012-06-15 06:36:36

标签: asp.net iis redirect error-handling

我使用下面的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.我注意到其他人提出同样的问题,但他们没有得到答案。

谢谢!

3 个答案:

答案 0 :(得分:9)

正如dbaseman所述,这是因为没有为nonasp.net文件调用asp.net处理程序。强制asp.net处理程序对所有请求进行操作的简单方法是在web.config中设置以下内容。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
</system.webServer>

这告诉IIS为所有请求运行所有托管模块,例如.html,.jpg,.css,.js等。这通常不赞成,因为它只是引入了额外的处理和延迟。

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

尝试的另一个选项(比上面更干净)在这里作为答案发布: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" 来解决只显示页面源代码的问题。