【问题标题】:Why does a Non-existant page returns 302 status when using a custom 404 page in asp.net为什么在asp.net中使用自定义404页面时不存在的页面返回302状态
【发布时间】:2011-02-20 11:22:23
【问题描述】:

我设置了一个自定义 404 页面 custom404.aspx,它正确返回“404 Not Found”错误,但是最初请求的不存在页面返回“302 Found”状态。

所以当我测试这个pagedoesnotexist.aspx 时,它返回一个“302 Found”,然后custom404.aspx 加载并返回一个“404 Not Found”状态。

我想确保搜索蜘蛛/机器人了解所请求的页面不存在并且不应出现在任何搜索结果中。这个设置是否正确?

【问题讨论】:

    标签: asp.net http-status-code-404 http-status-code-302


    【解决方案1】:

    简单地说...

    例如,使用:

    /path_to_error_page.html 
    

    ...而不是...

    http://www.example.com/path_to_error_page.html

    原因是服务器解释了初始请求然后生成重定向到 404,因此您的客户端有效地获得了 2 个响应。

    相对路径不会产生重定向,但内部服务器传输只会产生 1 个响应,即您想要的响应!!

    这应该可以解决您的问题。

    【讨论】:

    • 目前我正在为 400 和 500 错误页面使用相对路径。
    【解决方案2】:

    要回答上述问题,这就是自定义错误在 ASP.NET 中的工作方式。我见过一些例子(虽然我没有一个方便的例子),人们使用 HttpModules 来拦截错误,并为看起来不是机器人的用户提供自定义错误页面,并向看起来像的用户提供 404 响应成为机器人。

    在不同的方向上,我不确定机器人是否会定期跟踪 302 响应。也许更相关的是,让您的错误页面(假设它可用)出现在搜索结果中真的很糟糕吗?至少用户有指向您网站的链接——这比让您的竞争对手网站出现要好...

    【讨论】:

    • 我认为获取蜘蛛索引的自定义 404 和 500 等错误页面是一件坏事。例如,谷歌会抹黑有太多错误消息的网站,
    【解决方案3】:

    实际上,它很可能完全按照您在 web.config 中的配置工作。

    取决于您使用的网络服务器(IIS 6/7)以及您用于配置 404 自定义页面的方式,但基本上这是重定向到自定义错误页面和执行它之间的区别!

    目前您已将 asp.net / IIS 配置为重定向到错误页面。更改设置以执行页面,您将得到您正在寻找的内容:)

    【讨论】:

    • 您能说得更具体些吗?在 IIS 管理器/ASP 设置对话框中设置自定义错误页面时,这些更改将应用​​于 web.config。您是否建议我拦截 global.asax 中的错误并使用 Server.Execute("/path-to-error-page") 并在 web.config 中禁用自定义 500 错误消息?
    【解决方案4】:

    我已经找到了解决方案:

    在您的 web.config 中输入“redirectMode=ResponseRewrite”:

    <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/errors/GeneralError.aspx">
                <error statusCode="404" redirect="~/errors/PageNotFound.aspx" />
            </customErrors>
    

    ...然后在 Page_Load 中的自定义 404 页面中放入:this.Response.Status = "404 Not Found";

    瞧!

    【讨论】:

    • 当我将redirectMode=ResponseRewrite 添加到customErrors 时,我看到了来自服务器的正确且唯一的响应,代码为404。那么我们真的需要在Page_Load 中另外设置Reponse.Status 吗?
    猜你喜欢
    • 2011-05-17
    • 2017-01-10
    • 2014-07-29
    • 2011-11-22
    • 2017-03-24
    • 2011-08-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多