EasyASP v2.2新功能介绍(2):用Easp实现伪 URL Rewrite

前一篇日志介绍了EasyASP v2.2是 如何实现防sql注入的 ,看来还是有很多人对这个年代还使用ASP报以嗤之以鼻的态度。在此还是要劝导一下,如果你认为ASP是上个世纪的东西早就过时了,何必进来让自己难受,谢谢。EasyASP只是以卑微的态度在给最后的ASPer们提供一种解决问题的新思路,我也相信还在使用ASP的人对Easp有自己的评价。

不废话了,这一篇接着介绍Easp v2.2的另一个新功能:伪URL Rewrite。

1.为什么叫伪 URL Rewrite?

这个名字听起来好像非常的别扭,不过听我先解释一下。

比如我们打开博客园首页的任意一篇文章,可以看到它的地址类似这样:

http://www.cnblogs.com/zhuqil/archive/2010/01/15/1648321.html

这个我们知道是生成了静态页。但有些网站并没有采取生成静态页的方式,而是采用了URL Rewrite技术,显示的是静态页地址,其实是在服务器端用正则表达式对页面参数进行了映射,比如下面这样:

页面地址:
http://www.ambox.cn/design-2010-4.html
对应的Rewrite规则:
RewriteRule /(design|stuff)-(\d+)-(\d+)\.html /?type=$1&year=$2&page=$3

这种方式也通常被称为伪静态。而EasyASP实现的,只是用ASP模仿这种伪静态,理应被称为伪伪静态,实在是不好听,所以我干脆就把它叫伪Rewrite了。这种伪Rewrite表现出来是这样的URL:

http://www.ambox.cn/?design-2010-4.html

和静态页的地址差别在哪里呢?就是多了一个 ? 号,表明它只是一个url参数来模仿静态页的地址的,事实证明这种方式确实还是对SEO有一定的帮助,比如商界blog做得比较好的 华夏智慧网  ,使用的就是这类伪Rewrite。

2.EasyASP的伪Rewrite

在Easp v2.2里,要实现伪Rewrite很简单,还是先把方法语法和参数说明列出来:

Easp.RewriteRule rule, url  用标准模式设置EasyASP的URL伪静态规则
参数名称 类型 说明
rule string 含正则表达式规则的地址,必须以 "/" 或 "^/" 开头
url string 用以映射的URL地址,必须以 "/" 开头

 

Easp.Rewrite urlpage, rule, urlparam  用高级模式设置EasyASP的URL伪静态规则
参数名称 类型 说明
urlpage string 使用URL重写的页面,如是多个页面用 "|" 符号隔开;如果留空则表示当前页面
rule string 含正则表达式规则的重写后的地址,不包含目录结构
urlparam string 用以映射的URL参数

由于是模仿Rewrite,所以这里有个特殊的条件,就是只能在当前页进行URL的映射,比如你不能把/main.asp?list-45.html映射到/single.asp?t=$1&id=$2上。所以,推荐使用Easp.Rewrite来进行设置。

对于具体的使用方法,我们来看下面一段示例代码:

'设置重写规则
Easp.RewriteRule "/blog\.asp\?(\w+)/(\d{4})/(\d{2})/(\d+)\.html", "/blog.asp?username=$1&year=$2&month=$3&id=$4"
Easp.Rewrite "/|/index.asp", "(blog|photo|news)(-(\d+))?\.html", "type=$1&page=$3"

在设置了以上的规则之后,如果在浏览器里输入:

http://www.ambox.cn/blog.asp?testuser/2010/01/12345.html

效果将等同于:

http://www.ambox.cn/blog.asp?username=$1&year=2010&month=01&id=12345

这意味着你仍然可以使用 Easp.Get("username") 来获取username参数的值。同样的,你输入 /?photo-3.html ,也同样可以使用 Easp.Get("type") 来取得 "photo",用Easp.Get("page")来取得 "3"。采用这样的方式之后,对于开发者来讲就完全没有任何负担,你不需要做任何特殊的设置,即使你对重写正则不了解,在规则不生效的情况下你仍然可以通过传统的用 & 连接url参数的方式访问页面而不会产生任何程序错误。

3、EasyASP对伪URL Rewrite的补充方法

为了配合Easp的伪Rewrite,Easp还有两个方法可以减少开发者在使用伪Rewrite时编写更多的代码。

第一个方法是:

Easp.IsRewrite

这个方法可以判断当前页面访问的地址是否是已经生效的URL重写后的地址,返回一个布尔值。

第二个方法是:

Easp.ReplaceUrl param, value
参数名称 类型 说明
param string URL参数名称
value string 新的URL参数值

这个方法可以替换当前页URL参数中的某个值,并返回一个新的URL,比如还是用刚才的例子,用下面的地址访问:

http://www.ambox.cn/blog.asp?username=$1&year=2010&month=01&id=12345

那么,使用这个方法可以得到下面的结果

Dim newUrl
newUrl = Easp.ReplaceUrl("id","98765")
'返回 /blog.asp?username=$1&year=2010&month=01&id=98765

而用这个地址:

http://www.ambox.cn/blog.asp?testuser/2010/01/12345.html

则会返回替换后的URL重写地址

Dim newUrl
newUrl = Easp.ReplaceUrl("id","98765")
'返回 /blog.asp?testuser/2010/01/98765.html

Easp的分页中就使用了这个方法,所以在你使用Easp的URL重写后分页链接中也能准确的链接至重写后的URL地址,而使用传统的URL Rewrite组件的话,这个链接的地址是需要你自己去分析和重新拼接的。

4、小结

使用伪url重写到底有什么好处呢? 首先我可以肯定的是,对SEO是有帮助的,这个从华夏智慧网那里已经得到了印证(我和他们的开发人员深入的聊过这个问题);其次,正则中的参数匹配更严格,可以更安全的控制URL参数,比如在(\d+)的URL规则中,输入 ' 等注入带注入特征的符号肯定是不被正常解析的。EasyASP提供的这种看似简陋的伪重写模式,我相信还是有用武之地的,比如网友 智者千虑 基于 Easp v2.2 开发的 http://www.114msn.com ,其中就大量的用到了 Easp.Rewrite。

Easp v2.2的更多功能,期待你的挖掘。

 

下篇预告:EasyASP v2.2 的动态载入和插件模式

posted @ 2010-01-18 11:47  coldstone  阅读(2741)  评论(5编辑  收藏  举报