我已经设置了一个自定义 404 页面 custom404.aspx,它正确返回“404 Not Found”错误,但是最初请求的不存在页面返回“302 Found”状态。
因此,当我测试 thispagedoesnotexist.aspx 时,它返回“302 Found”,然后 custom404.aspx 加载并返回“404 Not Found”状态。
我想确保搜索蜘蛛/机器人理解所请求的页面不存在并且不应该出现在任何搜索结果中。这个设置正确吗?
我已经设置了一个自定义 404 页面 custom404.aspx,它正确返回“404 Not Found”错误,但是最初请求的不存在页面返回“302 Found”状态。
因此,当我测试 thispagedoesnotexist.aspx 时,它返回“302 Found”,然后 custom404.aspx 加载并返回“404 Not Found”状态。
我想确保搜索蜘蛛/机器人理解所请求的页面不存在并且不应该出现在任何搜索结果中。这个设置正确吗?
实际上,它很可能完全按照您在 web.config 中的配置工作。
取决于您使用的 Web 服务器(IIS 6/7)以及您用于配置 404 自定义页面的方式,但基本上这是重定向到自定义错误页面和执行它之间的区别!
目前您已将 asp.net / IIS 配置为重定向到错误页面。更改设置以执行页面,您将得到您正在寻找的内容:)
要回答上述问题,这就是自定义错误在 ASP.NET 中的工作方式。我见过一些例子(虽然我没有一个方便的例子),人们使用 HttpModules 来拦截错误,并为看起来不是机器人的用户提供自定义错误页面,并向看起来像的用户提供 404 响应成为机器人。
在不同的方向上,我不确定机器人是否会定期遵循 302 响应。也许更相关的是,让您的错误页面(假设它可用)出现在搜索结果中真的很糟糕吗?至少用户有一个指向您网站的链接——这比让您的竞争对手网站出现要好...
我找到了解决方案:
在您的 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";
瞧!
简单的说 ...
例如,使用:
/path_to_error_page.html
... 并不是 ...
http://www.example.com/path_to_error_page.html
原因是服务器解释初始请求然后生成到 404 的重定向,因此您的客户端有效地获得 2 个响应。
相对路径不会产生重定向,但内部服务器传输只会导致 1 个响应,即您想要的响应!
这应该可以解决您的问题。