进行URL重写的技术实现

第26卷第5期2010年5月赤峰学院学报(自然科学版)JournalofChifengUniversity(NaturalScienceEdition)V01.26No.5May2010运用ASP.N

第26卷第5期2010年5月

赤峰学院学报(自然科学版)

JournalofChifengUniversity(NaturalScienceEdition)

V01.26No.5May2010

运用ASP.NET进行URL重写的技术实现

郭乐明

(浙江农业商贸职业学院。浙江绍兴312000)

摘要:本文阐述了17RI重写mRewriting)的处:使URL简单易记;防止黑客攻击;满足搜索引擎需要;提高网站

可移植性;防止盗链;使UR_L支持“可删节”的需求.本文分析了ASP.NET实现URL重写的机制。并重点论述了用ASP.NET

进行URL重写的技术实现.

关键词:ASP.NET;URL

中图分类号:TP393.092

Rewriting;ISAPI;IlS;H'IT"P

Module;HTI'P

Handler

文献标识码:A文章编号:1673-260X(2010)05-00194)2

引擎而言就是一个新页面,它原先在搜索引擎中的PageR—ank也会随之消失,从头开始排名.如果用URL重写技术隐藏技术实现细节,修改移植就会很方便,而且完全不损失

PageRank.

URL重写的用处

URL重写,实质上是将网贞真实URL隐藏起来,使用户通过相应的虚拟URL(Virtual用处:

1.1满足搜索引擎需要,实现搜索引擎中排名优化.目前很多搜索引擎不支持动态链接,无法抓取动态网页,尤其是带“?”查询参数的网页,使网站许多信息无法被用户搜索到.即使搜索引擎支持动态链接,比如Goosle,它抓取动态网贞的优先度也远远低于静态网页,这样就使动态网贞的排名远远落后于静态网贞.而URL重写很大程度上是笄j于将动态链接转换成静态链接,这将使得搜索引擎尽可能深地抓取网站子栏目的内容,使网贞在搜索结果中排名靠前.1.2隐藏网贞实现技术,增强网站安全性.如果网页上带着像.jsp,.鹊p,.aspx这样的扩展名,让人一看就知道网站是用什么技术实现的.但如果将http://servedtest.aspx?id=3重写成http://server/test/3.him,使黑客无法知晓网页的实现技术,大大降低了网页受攻击的可能性.

1.3提高网站的移植性.由于真实URL含有实现技术语言的后缀信息(如.aspx/.asp/.jsp),当网站改变技术实现语言的时候,需要改动大量的链接,比如从.net平台的.aspx转成ia-va平台的.jsp.而且,如果贞面修改了扩展名,那么对于搜索

IIS

URL)访问网贞资源,以便

克服真实URL的许多不足.具体来讲,URL重写有以下几点

1.4防止盗链.所谓盗链,是指盗用其他网站上相应资源的URL链接为自己网站所片j.比如将别人网站上的图片或声音的URL写入自己的网页代码,使用户在访问网站时,能直接获得被盗用网站的资源.如果一个网站的资源经常被其他网站盗链,那么网站的性能将会大大下降.而如果将真实URL重写成虚拟URL。甚至附带强大的站外链接过滤功能,就可以防止盗链.

1.5使URL简单易记,增加URL美感.比如可以把“http://server/Detailaspx?,,ear=2009&month=12&day=3ff’重写成‘lattpt//server/2009/12/30/”,这样,用户可以相当方便地访问网站.1.6使URL支持“可删节”的需求ll-≈.“可删节”是一种极其重要的用户需求,通过URL重写。可以实现这种需求.比如将上例“htlp://server/2009/12/30/”中的日期删除,变成“http://舱rver/2009/12/”,能列出2009年12月的内容;继续删除URL中的月份,变成“http:llserverl20091”,能列出2009年的内容等.

2用ASP.NET实现URL重写的机制

如图l所示,当IIS(Intemet服务管理器)接收到一个

ASP.NET弓I擎

.aspx

lSAPIE)(ten商0n

Web请求

ISAPI

FjItor

\.

.a鞠

.asp

.90aP

,|aspnet_isapi.dII叫

asp.al|

—I

HTTPM。duIe

1Ir

HTTP二andIer

l将处理结果

l返回客户端

图lIIS和ASEN

T处理Web请求

net—isapi.dll

Web请求时,IIS通过ISAPI筛选器(IsAPIFiler)检查被

ISAPI扩展.然后aspnet_isapi.dll将处理操作传

请求文件的扩展名以确定如何处理该请求.IIs可以自行处理静态资源的请求(如HTML页面、图像),或者将请求传递到ISAPI1琵(ISAPIExtension).比如asp文件使用asp.dUISAPI扩展.对于ASP.NET文件,IIS会将请求传给∞P

递给托管的ASP.NET进程汹pnetJ个.exe),该进程读取啪一

chine.eonfig和web.config中配置的多个H1TrP模块(HfllP

Module),用对虚的HTI'P处理器(Hr】肿Handler)处理请

求,并将处理结果(如由ASP.NET网页生成的HTML代码)

一19一

万方数据

,

返回给客户端.1"2・3l

由图1可见,实现URL重写的关键是ISAPI:ISAPI

Filter和ISAPIExtension,但是,ISAPI的开发和部署比较困难。在ISAPI

Filter上实现URL重写难度比较大-由于ASP.

NET引擎与IIS非常相似田,所以可以利用ASP.NET的

HTrI.P

Module或HTI'PHandler实现URL重写.其中,HTrP

Module实现了类似于ISAPIFilter的功能,HTrPHandler实现了类似予ISAPIExtension的功能.

为了实现URL重写,ASP.NET需要创建和注册自定义

HTI'P

Module或HTI'PHandler。以便完成以下操作I-3:

(1)检查被请求的路径,以确定URL是否需要重写.(2)如果URL需要重写,可以调用System.Web.Http--Context类的RewritePath0方法来重写路径.

3如何用ASP.NET实现URL重写

3.1

为URL重写指定配置信息.在创建自定义H11'PMod—

uk或H11PHandler之前,必须在machine.config(影响整个Web服务器)或web.config(针对特定的Web应用程序)的configuration/system.web部分设置配置信息阁:

<httpModules>

<add

type=”typel”n,l毗l'le=”namel”,>

<!一type值为HrrI’PModule的程序集(assembly)和

类名称,而nBfne值提供了友好名称,可以在Global.聃舣文件中使用此友好名称来引用H'ITP

Module一>

</httpModulea>

或者:

<httpHandlers>

<add

verb=”verb”path=”pathl“type=”typel”,>

(!一应确保path值中使用的扩展名已从IlS映射到ASP.NET引擎.一>

</httpHandlers>

3.2编写URL重写规则.为了能使URL正确被重写,需要在web.config或其他文件中编写URL重写规则,以便确定需要重写的URL地址和URL转发的地址.一般使用可以序列化(Serializabh)的结构:

<URLRewriterRules>

<Rule>

<Url>重写之前的URLf./UrI><Rewrite>重写后的URL</Rewrite>

</Rule>

<,URLRewfiterRules>

3.3选择合适的URL重写时机.由于ASP.NET不同的身份验证(Authorize)和文件授权方式(Authenticate)会对URL重写产生影响I--'1。所以应选择Global.as强文件中合适的事件来执行URL重写.

如果使用Windows身份验证和文件授权方式,则最好使用H1TPModule进行URL重写,而且必须南BeginRequest事件或AuthentieateRequest事件执行URL重写.对于窗体(rom-.B)验证,H’几甲Module最好是由AuthorizeRequest事件执行重写P・7】

3.4自定义URL重写方法.以HTYP

Module为例:

public

class

MyURLRewriter{

public

static

void

Pro嗍O

URLRuks

rules=……//用自定义的URLBules类获得3.2节的URL重写规则

一20一

万方数据

forinti--0;……;i++),,遍历每个规则

,,用自定义的Helper.Resolve方法将rules[i].Ud

转换为相应的目录

string

URL=…’+Helper.Resolve(roles[i].Url)

+”¥”:

Regexregex=new

Regex(URL'RegexOptions.

IgnoreCase);

if(regexIsMatch(HttpContextCurrentRequestPath))l

string

URLRewrite=//如果找到匹配的规

则,则进行相应替换

regex.Replace(HttpContext.Current.Request.Path,

rules[i].Rewrite);

||重写URL

if(URLRewrite.Length>O){

HttpContext.Current.RewritePath

ⅢRL-

Rewrite)',//执行URL重写

break;

})】

……l

3.5在Global.聃舣相应事件中执行自定义的URL重写方法.例如:

protectedvoid

Application_BeginRequest(Object

sender,

EventArgs

e)

MyURLRewriter.ProcessO;)

4小结

本文详细阐述了URL重写的用处.实现机制和方法.URL重写之所以能在ASP.NET上实现,关键在于能利用ASP.NET的HttpContext类RewritePath0方法来重写路径,而无须改动复杂的ISAPI.然而,上述方法只针对一些扩展名的URL重写,如果要想处理所有文件类型的URL重写,甚至控制静态文件类型,则需要在上述基础上更为复杂的技术设置.

参考文献:

【1]JakobNielsen.URL越UI[DB/OL].http:llwww.useit.

com/alertbox/990321.html.

(2)ScottMitchell.Lrg.LRewriting

in

ASP.NET[DB/OL].

http://msdn.microsoft.com/library/default.asp?ufl=/iibrary/en—us/dnaspp/html/uflrewrifmg.asp.

[3)MicheleLerouxBmtamante.1mideIIS&ASP.NET[DB/

oL】.http://www.theservemde.net/articles/showartide.tss?

id=IIS_ASP.

(4]孙亚民.ASP.Net中自定义Http处理及其应用[DB/OL].

http:llwww.uml.org.cn/

C5)Microsoft.http://msdn.microsoR.com/library/[6]Mamoor

AhmedSiddiqui.HTTP

Handlers

and

H11'P

Modules

in

ASP.NET[DB/OL].http://www.15seconds.

com/issue/020417.htm

[7]ILichard

Birkby.URL

Rewriting埘山ASP.NETIDB/OL].

http://www.codeproject.com/aspnet/URLILewriter.asp.

,

运用ASP.NET进行URL重写的技术实现

作者:

作者单位:

刊名:

英文刊名:

年,卷(期):郭乐明浙江农业商贸职业学院,浙江,绍兴,312000赤峰学院学报(自然科学版)JOURNAL OF CHIFENG UNIMERSITY2010,26(5)

参考文献(7条)

1. Jakob Nielsen URL as UI

2. Scott Mitchell URL Rewriting in ASP.NET

3. Michele Leroux Bustamante Inside IIS&ASP.NET

4. 孙亚民 ASP.Net中自定义Http处理及其应用

5. 查看详情

6. Mansoor Ahmed Siddiqui HTTP Handlers and HTTP Modules in ASP.NET

7. Richard Birkby URL Rewriting with ASP.NET

本文读者也读过(10条)

1. 许礼捷. 周立峰. XU Li-jie. ZHOU Li-feng URL重写技术实现网站伪静态[期刊论文]-沙洲职业工学院学报2010,13(1)

2. 曲俊华. 朱海涛. 赵波 URL重写技术在动态网站优化中的应用研究[期刊论文]-网络安全技术与应用2011(9)

3. 高晻. 金玉玲. 刘凡儒 URL重写技术及在国内外授权访问系统中的应用研究[期刊论文]-现代情报2008,28(7)

4. 刘蓉. 王国顺. 文亮. Liu Rong. WANG Guoshun. WEN Liang 一个基于ASP.NET与Yahoo Web APIs的搜索网站的实现

[期刊论文]-现代图书情报技术2005(8)

5. 张涛. ZHANG Tao 浅谈在.Net平台下如何设计数据库操作通用类[期刊论文]-山西科技2010,25(2)

6. 罗芳 使用ADO.NET读取和写入XML[期刊论文]-致富时代(下半月)2010(4)

7. 邢晓燕. 杨华. 廖鹰梅. XING Xiao-yan. YANG Hua. LIAO Ying-mei ASP.NET动态网页中的数据传递技术[期刊论文]-电脑知识与技术2010,06(22)

8. 赵增敏 ASP.NET数据分页技术的研究[期刊论文]-魅力中国2011(1)

9. 郭清菊 ASP.NET中页面间传值方法的实现[期刊论文]-软件导刊2010,09(7)

10. 董一华 用ASP.NET实现URL重写[期刊论文]-计算机时代2006(8)

本文链接:http://d.g.wanfangdata.com.cn/Periodical_cfxyxb201005009.aspx

标签: