asp.net网站404页面返回200,或者302的解决办法
做网站在优化网站时会遇到网上很多说404页面返回200,或者302是不正常的问题。
最近工作问题,有用户反映了类似问题,让我折腾了好几天,总结一下解决办法
我的环境,win2008服务器,asp.net4.0程序
问题:一开始,访问例如:http://www.XXX.com/assss.aspx (assss.aspx)页面不存在,前台展示也是404页面不存在的提示,
但是用站长工具http://tool.chinaz.com/pagestatus/ 测试发现返回代码是200
有的页面返回是302
经过网上各方面查找方案
遇到问题主要有以下几个方面,挨个排查应该可以解决问题
1、对于正常情况,配置服务器,设置好
上图中,如果选择默认选项,里面设置地址需要填写.html,或者.htm文件,自定义404内容
如果选择第二个选项,执行url,则对应的需要填写.asp或者.aspx页面,当然,如果环境可以运行.php也可以设置.php文件,但有一点,需要在对应的文件里面添加状态代码
例如asp.net网站也就是.aspx文件需要一开始写入:
Response.StatusCode = 404;
或者
Response.Status = "404 Not Found";
然后可以自定义页面内容,
正常情况下,这么设置之后,在通过工具检查就会返回404的代码了
但遇到有的asp.net页面,也许在工具检查是返回的是302代码
这个主要是因为在web.config里面配置了自定义错误页面,程序在访问错误页面是进行了302跳转造成
此时可以通过在global.ascx文件中下面方法写入下面代码
protected void Application_Error(object sender, EventArgs e) { HttpException erroy = Server.GetLastError() as HttpException; if (erroy != null && erroy.GetHttpCode() == 404) { Server.ClearError(); string path = "~/error.aspx"; Server.Transfer(path); Response.End(); return; }
}
即可解决
一开始我的程序搞到这里,还是报200,这下把我郁闷坏了,通过找朋友帮忙一起排查,发现还有一个因素会导致这个问题
那就是服务器上安装了相关的安全保护软件,在返回响应时接管了错误,
我的服务器就是因为安装了安全狗软件,在里面对于404页面进行了接管,在关闭之后,200问题消失
到这里,基本上404的顽固问题就没有了,
但是如果更复杂一点儿,如果你程序中自己接管了伪静态调整了其他后缀,那么对应的不存在页面也需要自己来处理
这个根据程序逻辑,在不存在页面是需要自己在对应的需要处理的地方设置Response.StatusCode = 404;并通过
string path = "~/error.aspx";
Server.Transfer(path);
Response.End();
的方式来读取对应的你自己设置的错误页面,我这里设置的是error.aspx
到这里,顽固的错误代码不正常问题全面搞定。