ASP.NET的SEO--- Global.asax和HttpModule中的RewritePath()方法
因为在网上搜到了很多这方面的文章,而且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()方法的更多相关文章
- ASP.NET MVC5基础 - Global.asax详解
简介 作用 Global.asax的处理事件 实例说明 总结 简介 Global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件 ...
- Global.asax和HttpModule的执行顺序
Application_Start-->用户自定义的HttpModule-->Application_BeginRequest (注册->调用) 看到Init方法(在用户自定义的 ...
- ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法
https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...
- ASP.NET的SEO:目录
ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.N ...
- ASP.NET Global.asax详解
最近在研究bbsmax的代码,但是一直不知道入口在哪里,然后就对各个文件分析了,然后终于在对global.asax文件查看的时候看到Application_BeginRequest才明白入口,所以现在 ...
- ASP.NET中Global.asax 文件是什么?
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看 ...
- ASP.NET Global.asax详解【转】
global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件也被称为应用程序文件. global.asax 文件中的任何代码都是 ...
- Global.asax 文件说明
引用 来自 http://www.cnblogs.com/jianshao810/archive/2011/02/03/1948912.htm 在网上找了N多相关的东西总说的不够细,现在终于找到了. ...
- Global.asax 详解
在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...
随机推荐
- C++ operator 知识点
[转]C++隐式类型转换 operator T http://m.blog.csdn.net/blog/micx0124/12389973# 对于operator关健字用于运算符重载这我们都知道,其实 ...
- C++14使用std::integer_sequence展开tuple作为函数的参数
元组是一种长度固定的允许有不同类型元素的集合,根据元素的个数不同又分别称作一元组.二元组.三元组等.C++11中标准库增加了一个叫std::tuple的类模板,用于表示元组. 下面的代码演示了使用C+ ...
- IT项目管理
IT项目管理是项目管理在IT领域的应用,结合IT行业特点运用项目管理技术.理念和方法,包括9大知识领域(项目综合.范围.时间.成本.质量.人力资源.沟通.风险和采购管理)以及启动.计划.实施.控制和收 ...
- 格式化日期的js(正则魅力)
/** * 时间对象的格式化; */ Date.prototype.format = function(format) { // ◆ 使用prototype定义原型方法 /* * eg:forma ...
- [ActionScript 3.0] AS3 实现XML转换成JSON
package com.fylib.util { /** * @author Frost.Yen * @E-mail 871979853@qq.com * @create 2015-6-18 下午2: ...
- eclipse项目!*图标含义
一 .项目前面有红色!,表示工程中classpath中指向的包路径错误 解决办法: 右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选 ...
- java左移右移运算符
http://blog.csdn.net/dandanteng/article/details/7433531 首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数 ...
- T4 assembly
In a T4 template the executing assembly is not yours but one from the T4 engine. To access types fro ...
- JQuery基础教程:选择元素(下)
DOM遍历方法 利用前面介绍的jQuery选择符取得一组元素,就像是我们在DOM树中纵横遍历再经过筛选得到的结果一样.如果只有这一种取得元素的方式,那我们选择的余地从某个角度讲也是很有限的.很多情 ...
- 点评App wiki-git标准实践
fetch与pull fetch = pull + merge fetch -p,用于将清理工作同步到本地repository rebase-衍合 merge与rebase是合并的两种方法(上为mer ...