网站应该配制好详细的错误页面处理方式,主要是对404页面的处理
404错误通常出现在两种情况
1.访问的路径不存在
2.访问的路径之前存在,但是现在信息已经被删除
两种情况必须在用户访问后给到用户浏览器一个404的状态码,这个404的状态码可以让搜索引擎爬虫及时知道这条路径已被删除。
具体做法
新做一个友好美观的404错误页面
1.访问的路径不存在的直接在IIS中配制新的404错误页面
2.信息已经被删除的,在代码后台手动返回一个404的状态码
三种配制404错误的情况
用户后台可以设置404错误,mvc网站webconfig里面还能设置错误,iis里也默认有设置404错误。
三种配制对应三种状况,配制不好会出现冲突,出现返回的页面是404错误页面,但是状态码却是200,等于告诉爬虫已经访问成功了,这是非常糟糕的。
要确保三种情况访问不存在页面时的返回状态码为404
1.用户后台设置404错误
对于之前存在,但是现在信息已经被删除的路径,用这种方式处理,如某条产品信息已经被删除,代码后台直接返给一个404的状态码,然后直接输入错误信息或者通过Server.Transfer跳转到错误页面
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Server.Transfer("/404.html");
2.webconfig里面设置错误
mvc会自动拦截错误信息,自动给到用户一个错误,也就是程序级的错误,也就是说mvc路由能接受的错误路径会直接处理,不会到达iis错误,对于这个级别我们可以在webconfig里面设置错误页面
<customErrors defaultRedirect="/Error/NotFound/500.html" mode="On" redirectMode="ResponseRedirect">
<error redirect="/Error/NotFound/404.html" statusCode="404" />
</customErrors>
想看到错误信息必须在<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="ErrorPage.aspx">中添加redirectMode="ResponseRewrite"属性
其中RedirectMode属性值有ResponseRedirect和ResponseRewrite
1)RedirectMode 属性设置为ResponseRedirect,则将用户重定向到该错误页面,并且原始 URL 更改为该错误页面的 URL,并附带aspxerrorpath参数,参数值为发生错误的动态页的路径。
2)RedirectMode 属性设置为 ResponseRewrite,则将用户定向到错误页面,并且不更改浏览器中的原始 URL。
当设置redirectmode为responserewrite时,如果未安装.net framework3.5,会显示asp.net默认的编译错误,并没有执行定义的错误页面。edirectMode指定为ResponseRedirect时会执行指定的错误页面,但是会附带aspxerrorpat参数。
所以要配置web.config的customErrors节点的属性RedirectMode为ResponseRedirect并且起作用,需要安装.net framework3.5。
3.iis里设置404错误。
其它的错误信息会被iis处理并返回
3.1.编辑错误页设置,选第一个>自定义错误页
自定义错误页:显示指定的自定义错误页
详细错误选项:会显示详细的错误内容,包括文件绝对路径。不建议选该项
本地和远程请求错误选项:服务器本地访问显示详细错误选项,用户远程访问显示自定义错误页
3.2编辑自定义错误页面
3.2.1.将静态文件中的内容插入错误响应中
只是用指定的错误页面内容插入到错误响应中显示,错误的状态码不变,如原来是404返回还是404,未做手动处理状态的错误页面如静态错误页面请选该项,注意必须是静态页面
3.2.2.在此网站上执行URL
在服务器内部跳转到指定的错误页面,注意该方法需要在错误页面后台手动判断错误类型并手动返回一个错误状态码,否则统一返回状态码200
总结
代码后台手动返回错误状态曲如404,会被自动转到IIS中处理,如果要跳过IIS直接处理显示,则需要在编辑错误页设置>选详细错误选项
如果你的错误页面是纯静态的,建议你选择编辑自定义错误页面>将静态文件中的内容插入错误响应中
如果你的错误页面是动态文件,选择编辑自定义错误页面>在此网站上执行URL时一定要在代码后台手动判断返回错误状态码
返回状态码可以通过站长工具查询测