進行URL重寫的技術實現
第26卷第5期2010年5月赤峰學院學報(自然科學版)JournalofChifengUniversity(NaturalScienceEdition)V01.26No.5May2010運用ASP.N
第26卷第5期2010年5月
赤峰學院學報(自然科學版)
JournalofChifengUniversity(NaturalScienceEdition)
V01.26No.5May2010
運用ASP.NET進行URL重寫的技術實現
郭樂明
(浙江農業(yè)商貿職業(yè)學院。浙江紹興312000)
摘要:本文闡述了17RI重寫mRewriting)的處:使URL簡單易記;防止黑客攻擊;滿足搜索引擎需要;提高網站
可移植性;防止盜鏈;使UR_L支持“可刪節(jié)”的需求.本文分析了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重寫技術隱藏技術實現細節(jié),修改移植就會很方便,而且完全不損失
PageRank.
URL重寫的用處
URL重寫,實質上是將網貞真實URL隱藏起來,使用戶通過相應的虛擬URL(Virtual用處:
1.1滿足搜索引擎需要,實現搜索引擎中排名優(yōu)化.目前很多搜索引擎不支持動態(tài)鏈接,無法抓取動態(tài)網頁,尤其是帶“?”查詢參數的網頁,使網站許多信息無法被用戶搜索到.即使搜索引擎支持動態(tài)鏈接,比如Goosle,它抓取動態(tài)網貞的優(yōu)先度也遠遠低于靜態(tài)網頁,這樣就使動態(tài)網貞的排名遠遠落后于靜態(tài)網貞.而URL重寫很大程度上是笄j于將動態(tài)鏈接轉換成靜態(tài)鏈接,這將使得搜索引擎盡可能深地抓取網站子欄目的內容,使網貞在搜索結果中排名靠前.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支持“可刪節(jié)”的需求ll-≈.“可刪節(jié)”是一種極其重要的用戶需求,通過URL重寫??梢詫崿F這種需求.比如將上例“htlp://server/2009/12/30/”中的日期刪除,變成“http://艙rver/2009/12/”,能列出2009年12月的內容;繼續(xù)刪除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可以自行處理靜態(tài)資源的請求(如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的開發(fā)和部署比較困難。在ISAPI
Filter上實現URL重寫難度比較大-由于ASP.
NET引擎與IIS非常相似田,所以可以利用ASP.NET的
HTrI.P
Module或HTI'PHandler實現URL重寫.其中,HTrP
Module實現了類似于ISAPIFilter的功能,HTrPHandler實現了類似予ISAPIExtension的功能.
為了實現URL重寫,ASP.NET需要創(chuàng)建和注冊自定義
HTI'P
Module或HTI'PHandler。以便完成以下操作I-3:
(1)檢查被請求的路徑,以確定URL是否需要重寫.(2)如果URL需要重寫,可以調用System.Web.Http--Context類的RewritePath0方法來重寫路徑.
3如何用ASP.NET實現URL重寫
3.1
為URL重寫指定配置信息.在創(chuàng)建自定義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重寫規(guī)則.為了能使URL正確被重寫,需要在web.config或其他文件中編寫URL重寫規(guī)則,以便確定需要重寫的URL地址和URL轉發(fā)的地址.一般使用可以序列化(Serializabh)的結構:
<URLRewriterRules>
<Rule>
<Url>重寫之前的URLf./UrI><Rewrite>重寫后的URL</Rewrite>
</Rule>
<,URLRewfiterRules>
3.3選擇合適的URL重寫時機.由于ASP.NET不同的身份驗證(Authorize)和文件授權方式(Authenticate)會對URL重寫產生影響I--'1。所以應選擇Global.as強文件中合適的事件來執(zhí)行URL重寫.
如果使用Windows身份驗證和文件授權方式,則最好使用H1TPModule進行URL重寫,而且必須南BeginRequest事件或AuthentieateRequest事件執(zhí)行URL重寫.對于窗體(rom-.B)驗證,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一
萬方數據
forinti--0;……;i++),,遍歷每個規(guī)則
{
,,用自定義的Helper.Resolve方法將rules[i].Ud
轉換為相應的目錄
string
URL=…’+Helper.Resolve(roles[i].Url)
+”¥”:
Regexregex=new
Regex(URL'RegexOptions.
IgnoreCase);
if(regexIsMatch(HttpContextCurrentRequestPath))l
string
URLRewrite=//如果找到匹配的規(guī)
則,則進行相應替換
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.聃艤相應事件中執(zhí)行自定義的URL重寫方法.例如:
protectedvoid
Application_BeginRequest(Object
sender,
EventArgs
e)
{
MyURLRewriter.ProcessO;)
4小結
本文詳細闡述了URL重寫的用處.實現機制和方法.URL重寫之所以能在ASP.NET上實現,關鍵在于能利用ASP.NET的HttpContext類RewritePath0方法來重寫路徑,而無須改動復雜的ISAPI.然而,上述方法只針對一些擴展名的URL重寫,如果要想處理所有文件類型的URL重寫,甚至控制靜態(tài)文件類型,則需要在上述基礎上更為復雜的技術設置.
參考文獻:
【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重寫的技術實現
作者:
作者單位:
刊名:
英文刊名:
年,卷(期):郭樂明浙江農業(yè)商貿職業(yè)學院,浙江,紹興,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重寫技術實現網站偽靜態(tài)[期刊論文]-沙洲職業(yè)工學院學報2010,13(1)
2. 曲俊華. 朱海濤. 趙波 URL重寫技術在動態(tài)網站優(yōu)化中的應用研究[期刊論文]-網絡安全技術與應用2011(9)
3. 高晻. 金玉玲. 劉凡儒 URL重寫技術及在國內外授權訪問系統(tǒng)中的應用研究[期刊論文]-現代情報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動態(tài)網頁中的數據傳遞技術[期刊論文]-電腦知識與技術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