進(jìn)行URL重寫的技術(shù)實(shí)現(xiàn)
第26卷第5期2010年5月赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版)JournalofChifengUniversity(NaturalScienceEdition)V01.26No.5May2010運(yùn)用ASP.N
第26卷第5期2010年5月
赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版)
JournalofChifengUniversity(NaturalScienceEdition)
V01.26No.5May2010
運(yùn)用ASP.NET進(jìn)行URL重寫的技術(shù)實(shí)現(xiàn)
郭樂明
(浙江農(nóng)業(yè)商貿(mào)職業(yè)學(xué)院。浙江紹興312000)
摘要:本文闡述了17RI重寫mRewriting)的處:使URL簡單易記;防止黑客攻擊;滿足搜索引擎需要;提高網(wǎng)站
可移植性;防止盜鏈;使UR_L支持“可刪節(jié)”的需求.本文分析了ASP.NET實(shí)現(xiàn)URL重寫的機(jī)制。并重點(diǎn)論述了用ASP.NET
進(jìn)行URL重寫的技術(shù)實(shí)現(xiàn).
關(guān)鍵詞:ASP.NET;URL
中圖分類號:TP393.092
1
Rewriting;ISAPI;IlS;H'IT"P
Module;HTI'P
Handler
文獻(xiàn)標(biāo)識碼:A文章編號:1673-260X(2010)05-00194)2
引擎而言就是一個新頁面,它原先在搜索引擎中的PageR—ank也會隨之消失,從頭開始排名.如果用URL重寫技術(shù)隱藏技術(shù)實(shí)現(xiàn)細(xì)節(jié),修改移植就會很方便,而且完全不損失
PageRank.
URL重寫的用處
URL重寫,實(shí)質(zhì)上是將網(wǎng)貞真實(shí)URL隱藏起來,使用戶通過相應(yīng)的虛擬URL(Virtual用處:
1.1滿足搜索引擎需要,實(shí)現(xiàn)搜索引擎中排名優(yōu)化.目前很多搜索引擎不支持動態(tài)鏈接,無法抓取動態(tài)網(wǎng)頁,尤其是帶“?”查詢參數(shù)的網(wǎng)頁,使網(wǎng)站許多信息無法被用戶搜索到.即使搜索引擎支持動態(tài)鏈接,比如Goosle,它抓取動態(tài)網(wǎng)貞的優(yōu)先度也遠(yuǎn)遠(yuǎn)低于靜態(tài)網(wǎng)頁,這樣就使動態(tài)網(wǎng)貞的排名遠(yuǎn)遠(yuǎn)落后于靜態(tài)網(wǎng)貞.而URL重寫很大程度上是笄j于將動態(tài)鏈接轉(zhuǎn)換成靜態(tài)鏈接,這將使得搜索引擎盡可能深地抓取網(wǎng)站子欄目的內(nèi)容,使網(wǎng)貞在搜索結(jié)果中排名靠前.1.2隱藏網(wǎng)貞實(shí)現(xiàn)技術(shù),增強(qiáng)網(wǎng)站安全性.如果網(wǎng)頁上帶著像.jsp,.鵲p,.aspx這樣的擴(kuò)展名,讓人一看就知道網(wǎng)站是用什么技術(shù)實(shí)現(xiàn)的.但如果將http://servedtest.aspx?id=3重寫成http://server/test/3.him,使黑客無法知曉網(wǎng)頁的實(shí)現(xiàn)技術(shù),大大降低了網(wǎng)頁受攻擊的可能性.
1.3提高網(wǎng)站的移植性.由于真實(shí)URL含有實(shí)現(xiàn)技術(shù)語言的后綴信息(如.aspx/.asp/.jsp),當(dāng)網(wǎng)站改變技術(shù)實(shí)現(xiàn)語言的時候,需要改動大量的鏈接,比如從.net平臺的.aspx轉(zhuǎn)成ia-va平臺的.jsp.而且,如果貞面修改了擴(kuò)展名,那么對于搜索
IIS
URL)訪問網(wǎng)貞資源,以便
克服真實(shí)URL的許多不足.具體來講,URL重寫有以下幾點(diǎn)
1.4防止盜鏈.所謂盜鏈,是指盜用其他網(wǎng)站上相應(yīng)資源的URL鏈接為自己網(wǎng)站所片j.比如將別人網(wǎng)站上的圖片或聲音的URL寫入自己的網(wǎng)頁代碼,使用戶在訪問網(wǎng)站時,能直接獲得被盜用網(wǎng)站的資源.如果一個網(wǎng)站的資源經(jīng)常被其他網(wǎng)站盜鏈,那么網(wǎng)站的性能將會大大下降.而如果將真實(shí)URL重寫成虛擬URL。甚至附帶強(qiáng)大的站外鏈接過濾功能,就可以防止盜鏈.
1.5使URL簡單易記,增加URL美感.比如可以把“http://server/Detailaspx?,,ear=2009&month=12&day=3ff’重寫成‘lattpt//server/2009/12/30/”,這樣,用戶可以相當(dāng)方便地訪問網(wǎng)站.1.6使URL支持“可刪節(jié)”的需求ll-≈.“可刪節(jié)”是一種極其重要的用戶需求,通過URL重寫。可以實(shí)現(xiàn)這種需求.比如將上例“htlp://server/2009/12/30/”中的日期刪除,變成“http://艙rver/2009/12/”,能列出2009年12月的內(nèi)容;繼續(xù)刪除URL中的月份,變成“http:llserverl20091”,能列出2009年的內(nèi)容等.
2用ASP.NET實(shí)現(xiàn)URL重寫的機(jī)制
如圖l所示,當(dāng)IIS(Intemet服務(wù)管理器)接收到一個
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將處理結(jié)果
l返回客戶端
圖lIIS和ASEN
E
T處理Web請求
net—isapi.dll
Web請求時,IIS通過ISAPI篩選器(IsAPIFiler)檢查被
ISAPI擴(kuò)展.然后aspnet_isapi.dll將處理操作傳
請求文件的擴(kuò)展名以確定如何處理該請求.IIs可以自行處理靜態(tài)資源的請求(如HTML頁面、圖像),或者將請求傳遞到ISAPI1琵(ISAPIExtension).比如asp文件使用asp.dUISAPI擴(kuò)展.對于ASP.NET文件,IIS會將請求傳給∞P
遞給托管的ASP.NET進(jìn)程洶pnetJ個.exe),該進(jìn)程讀取啪一
chine.eonfig和web.config中配置的多個H1TrP模塊(HfllP
Module),用對虛的HTI'P處理器(Hr】腫Handler)處理請
求,并將處理結(jié)果(如由ASP.NET網(wǎng)頁生成的HTML代碼)
一19一
萬方數(shù)據(jù)
,返回給客戶端.1"2?3l
、
由圖1可見,實(shí)現(xiàn)URL重寫的關(guān)鍵是ISAPI:ISAPI
Filter和ISAPIExtension,但是,ISAPI的開發(fā)和部署比較困難。在ISAPI
Filter上實(shí)現(xiàn)URL重寫難度比較大-由于ASP.
NET引擎與IIS非常相似田,所以可以利用ASP.NET的
HTrI.P
Module或HTI'PHandler?qū)崿F(xiàn)URL重寫.其中,HTrP
Module實(shí)現(xiàn)了類似于ISAPIFilter的功能,HTrPHandler?qū)崿F(xiàn)了類似予ISAPIExtension的功能.
為了實(shí)現(xiàn)URL重寫,ASP.NET需要創(chuàng)建和注冊自定義
HTI'P
Module或HTI'PHandler。以便完成以下操作I-3:
(1)檢查被請求的路徑,以確定URL是否需要重寫.(2)如果URL需要重寫,可以調(diào)用System.Web.Http--Context類的RewritePath0方法來重寫路徑.
3如何用ASP.NET實(shí)現(xiàn)URL重寫
3.1
為URL重寫指定配置信息.在創(chuàng)建自定義H11'PMod—
uk或H11PHandler之前,必須在machine.config(影響整個Web服務(wù)器)或web.config(針對特定的Web應(yīng)用程序)的configuration/system.web部分設(shè)置配置信息閣:
<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”,>
(!一應(yīng)確保path值中使用的擴(kuò)展名已從IlS映射到ASP.NET引擎.一>
</httpHandlers>
3.2編寫URL重寫規(guī)則.為了能使URL正確被重寫,需要在web.config或其他文件中編寫URL重寫規(guī)則,以便確定需要重寫的URL地址和URL轉(zhuǎn)發(fā)的地址.一般使用可以序列化(Serializabh)的結(jié)構(gòu):
<URLRewriterRules>
<Rule>
<Url>重寫之前的URLf./UrI><Rewrite>重寫后的URL</Rewrite>
</Rule>
<,URLRewfiterRules>
3.3選擇合適的URL重寫時機(jī).由于ASP.NET不同的身份驗(yàn)證(Authorize)和文件授權(quán)方式(Authenticate)會對URL重寫產(chǎn)生影響I--'1。所以應(yīng)選擇Global.as強(qiáng)文件中合適的事件來執(zhí)行URL重寫.
如果使用Windows身份驗(yàn)證和文件授權(quán)方式,則最好使用H1TPModule進(jìn)行URL重寫,而且必須南BeginRequest事件或AuthentieateRequest事件執(zhí)行URL重寫.對于窗體(rom-.B)驗(yàn)證,H’幾甲Module最好是由AuthorizeRequest事件執(zhí)行重寫P?7】
3.4自定義URL重寫方法.以HTYP
Module為例:
public
class
MyURLRewriter{
public
static
void
Pro嗍O
{
URLRuks
rules=……//用自定義的URLBules類獲得3.2節(jié)的URL重寫規(guī)則
一20一
萬方數(shù)據(jù)
forinti--0;……;i++),,遍歷每個規(guī)則
{
,,用自定義的Helper.Resolve方法將rules[i].Ud
轉(zhuǎn)換為相應(yīng)的目錄
string
URL=…’+Helper.Resolve(roles[i].Url)
+”¥”:
Regexregex=new
Regex(URL'RegexOptions.
IgnoreCase);
if(regexIsMatch(HttpContextCurrentRequestPath))l
string
URLRewrite=//如果找到匹配的規(guī)
則,則進(jìn)行相應(yīng)替換
regex.Replace(HttpContext.Current.Request.Path,
rules[i].Rewrite);
||重寫URL
if(URLRewrite.Length>O){
HttpContext.Current.RewritePath
ⅢRL-
Rewrite)',//執(zhí)行URL重寫
break;
l
})】
……l
3.5在Global.聃艤相應(yīng)事件中執(zhí)行自定義的URL重寫方法.例如:
protectedvoid
Application_BeginRequest(Object
sender,
EventArgs
e)
{
MyURLRewriter.ProcessO;)
4小結(jié)
本文詳細(xì)闡述了URL重寫的用處.實(shí)現(xiàn)機(jī)制和方法.URL重寫之所以能在ASP.NET上實(shí)現(xiàn),關(guān)鍵在于能利用ASP.NET的HttpContext類RewritePath0方法來重寫路徑,而無須改動復(fù)雜的ISAPI.然而,上述方法只針對一些擴(kuò)展名的URL重寫,如果要想處理所有文件類型的URL重寫,甚至控制靜態(tài)文件類型,則需要在上述基礎(chǔ)上更為復(fù)雜的技術(shù)設(shè)置.
參考文獻(xiàn):
【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處理及其應(yīng)用[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.
,運(yùn)用ASP.NET進(jìn)行URL重寫的技術(shù)實(shí)現(xiàn)
作者:
作者單位:
刊名:
英文刊名:
年,卷(期):郭樂明浙江農(nóng)業(yè)商貿(mào)職業(yè)學(xué)院,浙江,紹興,312000赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版)JOURNAL OF CHIFENG UNIMERSITY2010,26(5)
參考文獻(xiàn)(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處理及其應(yīng)用
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重寫技術(shù)實(shí)現(xiàn)網(wǎng)站偽靜態(tài)[期刊論文]-沙洲職業(yè)工學(xué)院學(xué)報(bào)2010,13(1)
2. 曲俊華. 朱海濤. 趙波 URL重寫技術(shù)在動態(tài)網(wǎng)站優(yōu)化中的應(yīng)用研究[期刊論文]-網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2011(9)
3. 高晻. 金玉玲. 劉凡儒 URL重寫技術(shù)及在國內(nèi)外授權(quán)訪問系統(tǒng)中的應(yīng)用研究[期刊論文]-現(xiàn)代情報(bào)2008,28(7)
4. 劉蓉. 王國順. 文亮. Liu Rong. WANG Guoshun. WEN Liang 一個基于ASP.NET與Yahoo Web APIs的搜索網(wǎng)站的實(shí)現(xiàn)
[期刊論文]-現(xiàn)代圖書情報(bào)技術(shù)2005(8)
5. 張濤. ZHANG Tao 淺談在.Net平臺下如何設(shè)計(jì)數(shù)據(jù)庫操作通用類[期刊論文]-山西科技2010,25(2)
6. 羅芳 使用ADO.NET讀取和寫入XML[期刊論文]-致富時代(下半月)2010(4)
7. 邢曉燕. 楊華. 廖鷹梅. XING Xiao-yan. YANG Hua. LIAO Ying-mei ASP.NET動態(tài)網(wǎng)頁中的數(shù)據(jù)傳遞技術(shù)[期刊論文]-電腦知識與技術(shù)2010,06(22)
8. 趙增敏 ASP.NET數(shù)據(jù)分頁技術(shù)的研究[期刊論文]-魅力中國2011(1)
9. 郭清菊 ASP.NET中頁面間傳值方法的實(shí)現(xiàn)[期刊論文]-軟件導(dǎo)刊2010,09(7)
10. 董一華 用ASP.NET實(shí)現(xiàn)URL重寫[期刊論文]-計(jì)算機(jī)時代2006(8)
本文鏈接:http://d.g.wanfangdata.com.cn/Periodical_cfxyxb201005009.aspx