1

可能重复:
iis 7.5 劫持 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。

任何提示?

4

2 回答 2

2

我曾经在 IIS 7 中遇到过这种情况,解决方案是配置 IIS-Application 错误页面:

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

这在我的情况下起到了作用

编辑 1

请记住,该customErrors部分仅适用于由 ASP.Net 处理的请求,html 页面等静态请求仍将重定向到 IIS 中配置的 404 错误页面

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

欲了解更多信息

<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" />
于 2012-07-04T19:13:30.530 回答
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 处理。

于 2012-07-04T19:16:02.283 回答