【问题标题】:ASP.NET Custom error page for 404 returns 302 for http status404 的 ASP.NET 自定义错误页面为 http 状态返回 302
【发布时间】:2011-05-17 04:44:54
【问题描述】:

在我的 asp.net 网站中,我的 web.config 文件中有如下定义的自定义错误页面。

<customErrors mode="On" defaultRedirect="~/defaulterror.htm" >
<error statusCode="404" redirect="~/404.htm" />

当找不到文件时,它会正确显示 404.htm 页面,但问题是当我执行 Fiddler 跟踪时,它会返回 302 作为 HTTP 状态代码。由于仍有大量断开的链接,这对于搜索引擎页面索引来说是一个大问题由于这个原因,最近在我的网站上被编入索引。如何防止将 302 作为 HTTP 状态代码返回文件未找到错误并返回 404 文件未找到错误。我使用的是 asp.net 3.5。

【问题讨论】:

  • 请参阅this post,这是使用 ASP.Net MVC 过滤器属性的自定义 404 错误页面解决方案的示例。此解决方案还避免了向浏览器发送 302 / 200 消息。浏览器收到 404 响应。

标签: .net asp.net


【解决方案1】:

您可能已经知道 302 响应用于通知调用者所请求的资源已被移动到不同的位置。

当您在 Fiddler 中看到返回的 302 http 代码时,标题中是否还有一个“位置”声明?例如:

HTTP/1.1 302 Found
Location: http://www.yoursite.com/somewhere/blah.htm

您的网络服务器上似乎有“某些东西”正在拦截 404 返回并用 302 替换这些返回。我知道这没什么好做的,但我建议您查看该站点的 IIS 配置。

【讨论】:

    【解决方案2】:

    在谷歌上搜索了这个问题后,这似乎是 Microsoft ASP.NET 针对这种情况提供的默认行为。这对SEO非常不利。我发现的一种解决方法是检查请求的文件是否存在于 HTTP 处理程序(或 global.asax 文件)中,或使用:

    <customErrors mode="On" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="/FileNotFound.aspx" />
    </customErrors>
    

    如果请求的文件不存在,则将请求路径改写为一个文件未找到页面(如果使用HTTP handler或global.asax),清除后面404错误页面代码上的服务器错误,并添加一个404手动将错误标头添加到响应中,而不是等待服务器这样做。

    Server.ClearError();
    Response.Status = "404 Not Found";
    Response.StatusCode = 404;
    

    【讨论】:

    • 至少在 .NET FW 4.0 中添加了redirectMode 属性!
    • 这是完美的。 URL 保持在同一页面上,但现在我得到了正确的 404 状态代码。
    • 嘿,你能做这个完整的例子吗?我没有得到这个。
    • 如果您的项目还没有达到 ASP.NET 4,您也可以在 Global.asax 中为 2.0 和 3.0 项目使用这个出色的解决方案:blog.stormid.com/2009/08/…
    【解决方案3】:

    【讨论】:

    • 因此在答案(以及链接)中包含解决方案的重要性 - 他们似乎不再有博客。
    • 这个网站有很多很讽刺的地方: * 它是建立在 ASP 之上的 * &lt;meta name="description" content=" Our site has been renewed and because of this the page is no longer found …"&gt; * &lt;meta name="keywords" content="renewed, because, longer, found, “&gt; * &lt;meta property="og:title" content="Hebbink.com | Um website profissional por um preço accessível”&gt;(一个价格合理的专业网站)
    【解决方案4】:

    在 ASP.NET 4.0 中,您可以使用 redirectMode="ResponseRewrite" 发送漂亮的错误页面和正确的 HTTP 代码。

    【讨论】:

    • 我不会将错误代码称为“正确”。使用它,未找到错误将导致 HTTP 状态代码为 200。
    【解决方案5】:

    如果您将以下内容添加到您的 404 页面代码后面。你会得到正确的结果 -

    页面 404.aspx

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.StatusCode = 404;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2014-07-29
      • 2018-04-05
      • 2014-01-30
      相关资源
      最近更新 更多