使用IIS 7 Url重写模块时自定义404页面

时间:2011-04-30 15:41:28

标签: asp.net iis-7 url-rewriting http-status-code-404

我几乎已经完成了对现有网站进行重大改写和重新设计/重组,从而获得了大量流量。我一直在使用IIS 7 Url重写模块来启用无扩展和SEO友好的URL,以及将旧页面的请求重定向到新站点结构中的适当页面。它一直很顺利,但我正在研究如何设置自定义404页面并受到阻碍。到目前为止,我已经在web.config的节点中设置了以下代码:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="/404.htm" responseMode="ExecuteURL" />
</httpErrors>
事情是,它起作用,但并不完全!如果我转到一个不存在的URL,我确实得到了我的自定义404页面,但请求获得200 OK状态代码作为响应而不是所需的404.我已经摆弄了httpErrors节点的各种属性但没有运气。有谁知道如何显示自定义404页面并返回实际的404状态代码?

谢谢!

2 个答案:

答案 0 :(得分:3)

要使我们的自定义404处理程序正常工作,我们必须执行以下操作:

    <customErrors defaultRedirect="ErrorPage.aspx" mode="On">
        <error statusCode="500" redirect="ErrorPage.aspx" />
        <error statusCode="404" redirect="/404.aspx" />
        <error statusCode="403" redirect="ErrorPage.aspx" />
    </customErrors>

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>

我实际上认为我遇到了同样的问题,我只指定了一种类型的错误。这可能不适用于无扩展 - 但希望它能让你走上正确的轨道。

答案 1 :(得分:1)

这对我有用,在404.aspx:

的代码中
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Response.StatusCode = 404;
        this.Response.StatusDescription = "Not Found";
        this.Response.TrySkipIisCustomErrors = true;
    }