本系列目录

因为在网上搜到了很多这方面的文章,而且UrlRewrite中SEO中的重要性也在逐步下降,所以这一节我就写得简单一些。以下是几个重点:

1.UrlRewrite,顾名思义,只是针对URL进行的重写操作,不要认为www.freeflying.com/Jack/articles-2467.html就真的对应着一个html文件:articles-2467.html;实际上,该链接真正对应的是www.freeflying.com/articles.aspx?author=Jack&id=2467。所以,以前有人把这种技术称之为“伪静态”;当然,既然有“伪”,也就有真,那就是用IO操作,真正的根据用户输入、数据库查询之类的,生成一个html文件。这种技术,不再本系列讨论范围之类(且个人认为,价值不大)。

2. 要将www.freeflying.com/Jack/articles-2467.html 转化成 www.freeflying.com/articles.aspx?author=Jack&id=2467,肯定不能在我们习惯的页面事件中完成。因为如果不经过转换,我们根本无法到达www.freeflying.com/articles.aspx页面,链接会直接指向www.freeflying.com/Jack/articles-2467.html,在那里,也没有articles-2467.html文件,我们只能得到一个404错误。所以,转换工作将在“应用程序生命周期”中完成。

具体的实现方式有两种:Global.asax和HttpModule;但他们都采用了同一个方法:RewritePath()。

对于应该选择Global.asax还是HttpModule,有很多人都认为,HttpModule 效率更高,但我无法理解。按照msdn的说法,“如果我们创建了Global.asax文件,该文件将会被编译成一个HttpApplication派生类,并由该HttpApplicant派生类代替默认的HttpApplication实例,用以维护application。当 HttpApplication实例被创建的同时,在web.config中注册的所有HttpModule也会被创建;再然后,HttpApplication的Init()方法被调用。”“HttpApplication实例维护一个pipeline,用以依次对 request请求进行验证、缓存等处理”,而比较常用的有BeginRequest事件(在UrlRewrite中就是调用的该方法),ProcesRequest()方法(HttpHandler中必须实现的方法)。所以,我认为,HttpApplication(包括 Global.asax文件)“包含”了Application事件、HttpModule和HttpHandler的“容器”。无论把代码写在 Global.asax还是HttpModule中,性能是一样的。
3. 如代码所示,如果仅有一个或几个转换,我们可以使用if之类的表达式,如果是成千上万个转换,我们怎么办?而且事实的确如此,可以想象,id应该就是数据库里某个表的自增长字段。有没有一种自动化的处理机制,使得我们可以让程序智能化的进行URL的转换?有,就是大名鼎鼎的正则表达式。我们下一节专节进行讲解。

最后,是我找到的一些很好的参考链接:

UrlRewrite还有必要么?Google的官方解释

asp.net4.0中的“URL Routing”,据说能实现和URL Rewrite一样的功能

园子里老赵的博客,UrlRewrite的实现机制

还是老赵,估计是被SEOer气疯了之后写的一篇博客

ASP.NET的SEO--- Global.asax和HttpModule中的RewritePath()方法的更多相关文章

  1. ASP.NET MVC5基础 - Global.asax详解

    简介 作用 Global.asax的处理事件 实例说明 总结 简介 Global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件 ...

  2. Global.asax和HttpModule的执行顺序

    Application_Start-->用户自定义的HttpModule-->Application_BeginRequest   (注册->调用) 看到Init方法(在用户自定义的 ...

  3. ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法

    https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...

  4. ASP.NET的SEO:目录

    ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.N ...

  5. ASP.NET Global.asax详解

    最近在研究bbsmax的代码,但是一直不知道入口在哪里,然后就对各个文件分析了,然后终于在对global.asax文件查看的时候看到Application_BeginRequest才明白入口,所以现在 ...

  6. ASP.NET中Global.asax 文件是什么?

    Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看 ...

  7. ASP.NET Global.asax详解【转】

    global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件也被称为应用程序文件. global.asax 文件中的任何代码都是 ...

  8. Global.asax 文件说明

    引用 来自  http://www.cnblogs.com/jianshao810/archive/2011/02/03/1948912.htm 在网上找了N多相关的东西总说的不够细,现在终于找到了. ...

  9. Global.asax 详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

随机推荐

  1. Codeforces Round #373 (Div. 2)A B

    Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 这回做的好差啊,a想不到被hack的数据,b又没有想到正确的思维 = = [题目链 ...

  2. POJ 1740 A New Stone Game(普通博弈)

    A New Stone Game 题意: 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆.最后谁无子可取即输 ...

  3. HDU 5701 中位数计数

    这题真的很恶心,做了一天,最后问学长,才懂题意是什么,原来我一直都没读懂题.这我真的就无语了,你的题意多两句话会死啊?你测试样例多两个例子就不行啊?真蛋疼,题意都不懂,还做个shi? 题里说的是区间, ...

  4. UCOS-信号量(学习笔记)

    当事件控制块类型为OS_Event_Type_SEM类型时就是信号量,包含2个内容:信号量计数器OSEventcnt和等待列表OSEventTbl[]. 一创建信号量:OSSemCreat(int16 ...

  5. eclipse中输入@符号自动提示Annotation

    将Eclipse中Content Assist中的Auto activation for java里.的后面加上@符号即可

  6. python异常类型

    python2: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- Stop ...

  7. Singleton 单例模板

    // singleton.h #ifndef SINGLETON_H #define SINGLETON_H // 单例基类模板 template <class T> class Sing ...

  8. play framework (一)

    Playframework--像玩一样编程, 传说中有了它,放个猴子在电脑前都会编程了! http://developer.51cto.com/art/201202/320053.htm http:/ ...

  9. shell export

    export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝.这个过程称之为变量输出. 在脚本中export,跟在终端export原理一样. 他们都是一个子shell. http://b ...

  10. VisualVM 性能分析概述

    VisualVM是一个免费的Java应用监控.分析工具. 简单说来,VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力.所有这些都是免费的!它囊括的命令行工具包括 ...