新途官网欢迎你访问长沙北大青鸟新途校区,支持你成为一个受人尊重的专业人才!
当前位置: 首页 > 青鸟知识 > 网络技术

ASP技巧:如何用.ashx文件排除重复内容

来源:长沙it培训|发布时间:2017-04-28|浏览量:

学IT,好工作

就读北大青鸟长沙新途

20万年薪,等的就是你

求学热线: 0731-8309 3002

  不同的链接指向的页面其内容如果是相同的,改现象被称为“重复内容”,若一个网站的重复内容较多,搜索引擎会认为这个网站的价值不高,因而在更新网站信息的过程中应尽量避免重复内容。

  而动态网站的重复内容通常由URL引起,而URL重写会导致这一现象恶化。使用原始的URL参数,搜索引擎会进行适当的判断,得知重复内容是由URL参数引起的之后,将自动进行相应的处理,URL重写会掩盖URL参数,使搜索引擎无法识别URL。

  这些URL所指向的页面内容其实是一样的,都是id=231的那篇文章,但这篇文章被blog和news两个栏目所引用,出于各种原因的考虑。处理的办法有两种,一种是利用机器人(robot)协议“排除”其中一个,另一种是通过301将其中一个URL永久重定向另一个URL。

  robot协议,简单的讲,robot指的就是搜索引擎,针对Google,我们又将其称之为“蜘蛛(spider)”。蜘蛛是很有礼貌的,在抓取你的网页内容的之前,会首先征求你的意见。而你和robot之前就基于robot协议进行沟通。具体到实现,有两种方式:

  1. 将一个的robots.txt文本添加到网站根目录下,如:

  #static content, forbid all the pages under the "Admin" folder

  User-agent: *

  Disallow: /Admin

  #行表示注释;

  User-agent指搜索引擎,*表示针对所有搜索引擎,也可以指定具体的搜索引擎,如User-agent: googlebot;

  Disallow指定不允许访问的目录或页面,注意:1. 此文本是大小写敏感的;2.必须以“\”开头,表示网站根目录;和本系列的宗旨一样,我们着重谈asp.net技术。

  但我们怎么动态的生成这个文件呢(这种需求其实蛮多的)?可能我们马上想到的就是I/O操作,在根目录下写一个txt文件……但其实还可以有一种方法:使用一般处理程序(.ashx文件),代码如下:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler {
   
    public void PRocessRequest (HttpContext context) {

        HttpResponse response = context.Response;
       
        response.Clear();
               
        //response.ContentType = "text/plain";  如果要用IE6查看页面的话,不能这一条声明,原因不详
       
    //下面这两句在实际使用中应该数据库等动态生成
        response.Write("User-agent: * \n");
        response.Write("Disallow: /news/231.html \n");

    //引用一个静态的robots文件内容,里面存储不会改变的屏蔽内容
        response.WriteFile("~/static-robots.txt");

        response.Flush();
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

  一般处理程序实现了IHttpHandler,在前面UrlRewrite部分中,我们讲到了HttpModule,其实在ASP.NET的应用程序生命周期中,有一个称之为“管道(pipeline)”的概念:一个HTTP请求,经过一个有一个的HttpModule的“过滤/处理”,最终到达一个HttpHandle的“处理器”部分,HttpModule和HttpHandle就组成了一个“管道”.

  如果你对它还比较陌生的话,查看Page的源代码,你会发现,Page也实现了IHttpHandler,所以*.aspx文件是最常用的HttpHandle。但Page不仅仅是一个HttpHandler,它还嵌入了复杂的页面生命周期事件,所以从节约资源的角度考虑,很多时候我也可以使用自定义的、更轻量级的*.ashx文件(),来完成一些简单的工作。和生成一个txt文件类似,我们还可以生成验证码(jpg文件),xml文件等。

  然后还要做的一件事就是进行URLRewrite:

    void application_BeginRequest(object sender, EventArgs e)
    {
        // Code that runs on application startup
        HttpContext context = HttpContext.Current;
        string currentLocation = context.Request.Url.LocalPath;

        if (currentLocation.ToLower() == "/website1/robots.txt")
        {
            context.RewritePath("~/Handler.ashx");
        }

    }
 

  这样,蜘蛛就会以为在网站的根目录下的确存在一个robots.txt文件。

  2. 在需要屏蔽的页面META标签里加上

  noindex 意味着该页面不能被索引

  nofollow 意味着该页面不能被“跟随”(将在SEO Hack中详细讲解)

  这是静态页面的效果,如果需要动态生成,也相当简单:

  代码

<meta id="meta" name="robots" content="noindex,nofollow" />
noindex 意味着该页面不能被索引
nofollow 意味着该页面不能被“跟随”(将在SEO Hack中详细讲解)
这是静态页面的效果,如果需要动态生成,也相当简单:

代码
    protected void Page_Load(object sender, EventArgs e)
    {
        HtmlMeta meta = new HtmlMeta();
        meta.Name = "robots";
        meta.Content = "noindex,nofollow";
        this.Header.Controls.Add(meta);
    }

  meta中还可以指定description、keyWord等,其技术实现是相同的。

  那么,两种方式我们如何选择呢?我的一些建议:

  1. 尽量使用robots.txt,这既能降低网站的负载(虽然很小,呵呵),因为蜘蛛查看了robots.txt文件之后,就不会再请求被屏蔽的相关页面了;而如果使用meta方式,蜘蛛必须先请求该页面,再做出不检索的判断,这时Http请求已经发出了,服务器端的资源就已经浪费了;另外,如果过多的meta屏蔽,也会使蜘蛛对网站产生不佳的印象,减少或放弃该网站的检索收录;

  2. robots.txt文本的匹配时从左到右的,这里就没什么正则匹配了!所以有的时候,我们不得不使用meta方式了。

  最后,再讲一些注意事项:

  1. 不要在所有页面使用相同的Keyword和Discription,这是我们很容易犯的一个错误,虽然articles.aspx是一个页面,但加上url参数后,就变成了成千上万个页面,如果你在页面上写死了Keyword和Discription,那将使这成千上万个页面都是一样的Keyword和Discription!

  2. 尽量避免使用基于URL的sessionID。ASP.NET在客户端禁用cookie的情况下,可以设置使用基于URL的SessionID,效果类似。

上一篇:云计算的下一发展阶段:堆叠云计算

下一篇:SQL语句入门:SQL插入语句

扫码关注微信公众号了解更多详情

跟技术大咖,专业导师一起交流学习

姓名
电话
Q Q

在线留言

请您把问题留下,我们为您提供专业化的解答!

QQ咨询
  1. 招生问答
  2. 热门点击
  3. 最新更新
  4. 推荐文章

关于我们

学校成就

就业保障

联系方式

联系电话:0731-8309 3002

在线报名

预约报名

备案号:湘ICP备16017604号-1
地址:长沙高新区麓谷麓松路679号

在线咨询
课程咨询 学费咨询 学费分期 入学测试 免费预约 来校路线
初中生 高中生 待业者
0731-8309 3002

在线客服