【问题标题】:Custom 404 page when using IIS 7 Url Rewrite Module使用 IIS 7 URL 重写模块时的自定义 404 页面
【发布时间】:2011-08-16 02:48:02
【问题描述】:

我几乎完成了对一个获得大量流量的现有网站的重大重写和重新设计/重组。我一直在使用 IIS 7 Url Rewrite Module 来启用无扩展和 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 状态码?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    要让我们的自定义 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>
    

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

    【讨论】:

    • 感谢您的回复。我已经尝试过与您建议的类似的东西,并再次重新审视它。我可能遗漏了一些东西,但即使设置了这些项目,我仍然看到的是 200 而不是 404。也许这是整个无扩展的东西,正如你所说的 - 不确定。我终于实现了一个解决方法,并在 404 ASPX 页面的 Page_Init 事件中明确地将响应状态代码设置为 404。感觉很hacky,但我现在就接受它。如果其他人有更优雅的解决方案,请告诉我。谢谢!
    • @drewta,可能有一些 IIS 设置指定 IIS 在没有扩展时将所有流量发送到 ASP.NET 运行时。例如,我必须指定所有 CFM(旧网站是冷融合站点)都应该转到 ASP.NET,以便我的自定义 404 处理程序可以处理它。在由于时间限制而放弃之前,我花了大约 10 分钟的时间来尝试无扩展。祝你好运。
    • 这个设置会在抛出异常时改变当前的url
    【解决方案2】:

    这对我有用,在 404.aspx 后面的代码中:

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

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2013-04-23
      • 1970-01-01
      • 2012-04-17
      相关资源
      最近更新 更多