ASP.NET MVC制作404跳转(非302和200)

news/2024/7/19 9:09:48 标签: 测试, 爬虫

前言距离上次发文已经有几个月了! 这段时间里,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告!


产生404的原因主要有以下:

    1.浏览器和爬虫:某些浏览器会请求网站的favicon.ico,而如果你的网站根目录下没有这个文件,那么浏览器会有一条404的log,同样搜索引擎会请求robots.txt。但这个影响不大。

    2.用户输入了错误URL:某些用户不小心在浏览器地址栏加了一个字符或者删除了一个字符,导致服务器找不到请求的路径。

    3.某些网站引用的地址过老:某个页面已经被删除,而其他网站依然引用,他人点击的时候服务器找不到请求的路径。

404与SEO:

    本网站由于经过改版,所以有很多失效的链接,而我也提交了死链给百度,但过了半个月也不见百度删除那些失效的链接。后来我用站长工具查询那些链接的HTTP状态,发现竟然返回的是302,这就难怪了。

    为了给用户友好的体验,我制作了404页面,并且在Application_Error中捕获404,然后Response.Redicet()到404页面。那时候因为不懂SEO,以为这就算做了404页面。结果发现,这样是做了一个302跳转,这样404的状态码就变成了302,而搜索引擎Spider请求的时候,返回的是302的话,它就会认为你这个网页是正常的!导致网站的失效链接一直不被搜索引擎删除,久而久之,网站的死链过得,就会得到搜索引擎的惩罚。所以,正确的404跳转应该是返回友好页面给用户的同时,返回404的HTTP状态码给Spider。

ASP.NET中404跳转的解决方案:

    上一篇讲了ASP.NET中自定义错误页的三种方法,这里就不多说了!

    博主使用的是第三种httpErrors也就是IIS错误页,原因如下:

        Application_Error:好像比较难做到404跳转的同时又返回404状态码,一般会返回302;

        customErrors:博主尝试使用的时候,失败了,学艺不精啊,哎;

        httpErrors:博主尝试使用的时候,碰巧解决了,所以就是它了;

    下面就来讲具体如何操作!

 

    IIS错误页的使用又分三种情况:

    1.返回静态文件  2.返回动态页面  3.302重定向。

    其中3直接忽略。   


    1.返回静态文件    

    使用此方法,需要准备一个静态html页面,然后放在硬盘里,指定路径的时候须给出绝对路径。

    web.config中的写法

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="D:\ErrorPage\404.html" responseMode="File" />
    </httpErrors>
</system.webServer>

     prefixLanguageFilePath表示客户端语言的文件目录,path表示文件相对于客户端语言目录的路径,responseMode表示响应类型,这里是File(文件)

    IIS中的操作

第一步

 

第二步

 

    两者选其一即可

    由于博主尝试使用文件的时候以失败告终,所以这里不多说,说多了都是泪!

 


    2.返回动态页面

web.config中的写法

</system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage/NotFound" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

    与上面不同的就是responseMode="ExecuteURL"。

IIS中的操作

第二步

 

    两者选其一即可

    博主最后选择的这种方法,但是这种方法有几个坑需要注意

        1.不能指定网站相对目录下的静态HTML文件,比如404.html。

        2.指定的动态页面cshtm、aspx等,需指定响应码为404。

    以上两种情况如果不注意,那么你的404返回的响应码不是404也不是302而是200。

    因为这种方法是返回网站根目录下的一个网页来作为404页面,而静态页面只要能访问到,那肯定就是200了。动态cshtml或者aspx如果没指定响应码,那么返回200也不奇怪。

 

    所以说具体做法如下(以ASP.NET MVC为例):

public class ErrorPageController : Controller
{
    public ActionResult NotFound()
    {
        Response.Status = "404 Not Found";
        Response.StatusCode = 404;
        return View();
    }
}       

    建一个控制器ErrorPage,里面可以定义各种错误页面,这里只是404页面。

    然后建一个NotFound视图,把404页面写漂亮一点。

    OVER。


    这个时候再去请求不存在的路径。

 

 

请求错误路径

404状态

 

 


完美解决!
 
Demo下载地址: 点击进入

  出自:不落阁(博主个人网站)

  地址:www.leo96.com

  转载请注明出处!

转载于:https://www.cnblogs.com/LY2016start/p/6629116.html


http://www.niftyadmin.cn/n/557014.html

相关文章

java 积分升级 触发器_java – Spring Quartz重新安排或更新触发器?

我使用的是Spring 3.2和Quartz 2.2.我的目标类和方法,public class Producer {public void executeListener() {System.out.println(" Test Method . ");}}在我的spring applicationContext.xml中,上面的代码正常工作,executeListener()nethod连续执行,间隔为5秒,启动…

Codevs 3322 时空跳跃者的困境(组合数 二项式定理)

3322 时空跳跃者的困境 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 背景&#xff1a;收集完能量的圣殿战士suntian开始了他的追捕行动。费尽千辛万苦&#xff0c;他终于看到了飞翔的影子&#xff0c;于是他加快了速度冲向飞翔。在两…

对象属性以及如何创建对象

js对象的定义是&#xff1a;无序属性的集合&#xff0c;其属性可以包含基本值、对象或者函数。也就是说对象是一组没有特定顺序的值。 先来聊聊对象的中的两类特殊的内部属性&#xff1a;数据属性和访问器属性 1.数据属性&#xff1a;除了最基本的属性本身的值之外&#xff0c;…

java 判断域密码到期提醒_域帐号密码过期邮件提醒

思路&#xff0c;通过AD工具取得全部OU下人员工号、邮箱地址&#xff0c;再检测工号多少天没修改密码&#xff0c;超过设定的天数&#xff0c;就执行发送邮件# -*- coding:utf-8 -*-import smtplibimport osimport smtplibfrom email.mime.text import MIMETextfrom email.util…

遇到影响服务器性能的cpuspeed 服务

最近碰到一个很蛋痛的问题&#xff0c;&#xff0c;我在公司的代码上实现了一个功能&#xff0c;然后基于这个测试&#xff0c;结果比对数据发现每天少三千多万条&#xff0c;&#xff0c; 然后我各种优化&#xff0c;各种零碎部功能阉割&#xff0c;&#xff0c;还是丢数据&am…

阿里 java 面试题 p6_刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)...

这是来自于优知学院一位铁粉面试回来的总结经验刚参加完蚂蚁金服的Java P6级的面试&#xff0c;一共参加了4面。面试归来&#xff0c;总结下阿里面试流程、面试过程、以及面试题目范畴。文末有阿里Java P6面试必考题与答案参考~阿里面试流程第一轮&#xff1a;电话技术初面&…

Linux环境下Python 升级2.7

1.下载Python2.7安装包 # wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 解压到指定目录 #tar -zxvf Python-2.7.3.tgz -C /usr/local/ #cd Python-2.7.3 编译、安装#./configure --prefix/usr/local/python27 #make #make install 消除旧版本软链接 #mv…

MongoDB索引简介与使用

1、B树索引&#xff08;B-tree Index&#xff09; 优点&#xff1a;支持高效的范围查询和排序。 缺点&#xff1a;索引的大小较大&#xff0c;对于频繁更新的集合会有一定的维护开销。 使用场景&#xff1a;适用于大部分查询场景。 db.collection.createIndex({ field: 1 })Mon…