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
到这里,顽固的错误代码不正常问题全面搞定。

 

posted @ 2015-06-10 11:02  uxinxin  阅读(1634)  评论(0编辑  收藏  举报