进行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
1
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
E
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
})】
……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