详解ASP.NET的SEO:RewritePath()方法

2017 年 4 月 7 日2460

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

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

  2.要将http://www.zjjv.com//Jack/articles-2467.html转化成http://www.zjjv.com//articles.aspx?author=Jack&id=2467,肯定不能在我们习惯的页面事件中完成。因为如果不经过转换,我们根本无法到达http://www.zjjv.com//articles.aspx页面,链接会直接指向http://www.zjjv.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的转换?有,就是大名鼎鼎的正则表达式。我们下一节专节进行讲解。

  (凡署名“IT168”的稿件均为本站原创,请在转载时注明出处及作者。非上述媒体稿件均系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。转载者自负版权等法律责任。)

  

0 0