为什么在asp.net中使用自定义404页面时,不存在的页面返回302状态

时间:2010-05-17 15:17:36

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

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

因此,当我测试thispagedoesnotexist.aspx时,它返回“302 Found”,然后custom404.aspx加载并返回“404 Not Found”状态。

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

4 个答案:

答案 0 :(得分:0)

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

在另一个方向,我不确定机器人是否会定期关注302回复。也许更相关的是,让你的错误页面(假设它可用)显示在搜索结果中真的很糟糕吗?至少用户有一个指向您网站的链接 - 这比让您的竞争对手网站显示更好......

答案 1 :(得分:0)

实际上,它最有可能与你在web.config中配置完全相同。

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

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

答案 2 :(得分:0)

我找到了解决方案:

在你的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";

瞧!

答案 3 :(得分:-4)

简单地说......

例如,使用:

/path_to_error_page.html 

......而不是......

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

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

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

这可以解决您的问题。