不存在的url路径抛出标准的IIS 404页面

时间:2012-07-04 18:48:15

标签: asp.net web-config

  

可能重复:
  iis 7.5 hijacking 404

我在IIS 7.5上运行.net 4.0站点。

我已将自定义错误部分添加到我的webconfig:

<system.web>
    <customErrors defaultRedirect="/error" mode="On">
        <error statusCode="404" redirect="/error?code=404"/>
        <error statusCode="500" redirect="/error?code=500"/>
    </customErrors>
</system.web>

自定义错误正在运行。任何内部服务器错误都会重定向到/error?code=500,当找到缺失参数时,任何throw new HttpException(404, "Not found")都会重定向到/error?code=404。但是任何不存在的url路径仍会抛出标准的IIS 404页面,而不是我的自定义404。

任何提示?

2 个答案:

答案 0 :(得分:2)

在IIS 7中发生过这种情况,解决方案是配置IIS-Application错误页面:

  • 打开IIS
  • 选择您的applciaiton
  • 在IIS部分下打开错误页面
  • 在名为“操作”的右侧面板中,单击“编辑功能设置”
  • 测试选择:
    • 自定义错误页面
  • 接受更改
  • 重新启动IIS

在我的案例中,这就是诀窍

编辑1

请记住,customErrors部分仅针对ASP.Net处理的请求工作静态请求(如html网页)仍会重定向到IIS中配置的404错误页面

但是,您可以在自己的配置文件中覆盖此行为:

For more info

<configuration>
  <system.webServer>
    <httpErrors existingResponse="Replace" errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="GenericError.aspx" responseMode="Redirect"  />
    </httpErrors>
  </system.webServer>
</configuration>

您还可能需要将上一部分标记为可更新

打开文件:

C:\Windows\System32\inetsrv\config\applicationHost.config

并改变:

<section name="httpErrors" overrideModeDefault="Deny" />

致:

<section name="httpErrors" overrideModeDefault="Allow" />

答案 1 :(得分:0)

您可以在Global.asax或IHttpModule中处理它。

Exception currentException = Server.GetLastError();
HttpException httpException = currentException as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
    // redirect
}

检查http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-integrated-pipeline/以获取有关如何设置通配符映射的信息,因此所有请求都由asp.net处理。