html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

ASP.NET教程:使用.ashx文件去除重复内容_.NET教程_编程技术

[ ] 已经帮助:人解决问题
fbXHTML5中文学习网 - HTML5先行者学习网

不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为“重复内容”,如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高。所以我们应尽量避免各种重复内容。fbXHTML5中文学习网 - HTML5先行者学习网

动态网站的重复内容常常是由URL参数引起的,而URL重写会恶化这一现象(比较耐人寻味哟,呵呵)。因为如果使用的是原始的URL参数的话,搜索引擎可能会进行适当的判断,而得知重复内容是由URL参数引起的,自动的进行相应的处理;而URL重写会掩盖URL参数,反而使得搜索引擎无法识别URL参数。比如:fbXHTML5中文学习网 - HTML5先行者学习网

原始的URL:
http://www.freeflying.com/articles.aspx?id=231
&catelog=blog
http://www.freeflying.com/articles.aspx?id=231
&catelog=news

经过URL重写过后的URL:
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
fbXHTML5中文学习网 - HTML5先行者学习网

这些URL所指向的页面内容其实是一样的,都是id=231的那篇文章,但这篇文章被blog和news两个栏目所引用,出于各种原因的考虑,我们最终的URL还是如上所示。fbXHTML5中文学习网 - HTML5先行者学习网

处理的办法有两种,一种是利用机器人(robot)协议“排除”其中一个,另一种是通过301将其中一个URL永久重定向另一个URL。fbXHTML5中文学习网 - HTML5先行者学习网

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

1. 将一个的robots.txt文本添加到网站根目录下,如:fbXHTML5中文学习网 - HTML5先行者学习网

#static content, forbid all the pages under the "Admin" folder
User-agent: *
Disallow: /Admin
fbXHTML5中文学习网 - HTML5先行者学习网

#行表示注释;fbXHTML5中文学习网 - HTML5先行者学习网

User-agent指搜索引擎,*表示针对所有搜索引擎,也可以指定具体的搜索引擎,如User-agent: googlebot;fbXHTML5中文学习网 - HTML5先行者学习网

Disallow指定不允许访问的目录或页面,注意:1. 此文本是大小写敏感的;2.必须以“/”开头,表示网站根目录;fbXHTML5中文学习网 - HTML5先行者学习网

和本系列的宗旨一样,我们着重谈ASP.NET技术。所以更多的robots.txt文本的注意事项,请查看http://www.googlechinawebmaster.com/2008/03/robotstxt.htmlfbXHTML5中文学习网 - HTML5先行者学习网

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

<%@ 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;
        }
    }

}
fbXHTML5中文学习网 - HTML5先行者学习网

fbXHTML5中文学习网 - HTML5先行者学习网

一般处理程序实现了IHttpHandler,在前面UrlRewrite部分中,我们讲到了HttpModule,其实在ASP.NET的应用程序生命周期中,有一个称之为“管道(pipeline)”的概念:一个HTTP请求,经过一个有一个的HttpModule的“过滤/处理”,最终到达一个HttpHandle的“处理器”部分,HttpModule和HttpHandle就组成了一个“管道”,非常形象哟,呵呵。贴张图吧:fbXHTML5中文学习网 - HTML5先行者学习网

fbXHTML5中文学习网 - HTML5先行者学习网

fbXHTML5中文学习网 - HTML5先行者学习网
fbXHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助