首頁(yè) > 運營(yíng) > 建站經(jīng)驗 > 正文

玩轉asp.net的URL Rewriting

2023-05-08 18:33:58
字體:
來(lái)源:轉載
供稿:網(wǎng)友

URL Rewriting,這個(gè)好像似曾相識,又覺(jué)得很陌生的技術(shù),已經(jīng)隨著(zhù)資訊安全與SEO (Search Engine Optimization)的腳步,逐漸影響每個(gè)Web Developer,不論你是走哪個(gè)技術(shù)的,基本上都很難不去重視它,因為它其實(shí)可以幫你很多忙。光是一個(gè)REST的URL樣式,就可以讓很多人眼睛為之一亮。

試想,如果你的網(wǎng)站有某支URL是長(cháng)這樣好看:
http://www.cuoxin.com/myblog/blog.aspx?id=18472938290&postdate=20090404

還是這樣好看:
http://www.jxzszyw.com/myblog/2009/04/04/18472938290.aspx

又或者,使用者是否可以用這樣的輸入URL方式:
http://www.jxzszyw.com/productinfo/MP3

去列出他想要搜尋的MP3 Player的型錄,還是要使用者去打:
http://www.jxzszyw.com/productinfo/search.aspx?keyword=MP3這樣的URL?

我想對行銷(xiāo)或消費者行為有概念的人來(lái)看的話(huà),答案就很明顯了。

URL Rewriting的強項,就是將外表的URL,轉換成內部自己看的到的URL再做處理,可以讓內部的URL繼續使用,又可以讓外部的URL具親和性,因此URL Rewriting現在已經(jīng)逐漸成為網(wǎng)站開(kāi)發(fā)人員必須要知道的技術(shù)之一,而且現在其實(shí)已經(jīng)有很多URL Rewriting的模組可以使用了,例如UrlRewriting.Net這個(gè)套件,或是IIS 7.0中的URL Rewriting Module等。

不過(guò),如果能夠自己走一遭的話(huà),會(huì )更了解URL Rewriting是什么,而且對于網(wǎng)路上的URL Rewriting模組,也會(huì )更具精確的掌握力(以下以ASP.NET為主要說(shuō)明的技術(shù),其他的語(yǔ)言請參照手冊,找出相對應的功能)。

首先,URL Rewriting是作為外部與內部URL要求的轉換器,它需要過(guò)濾所有的URL,來(lái)執行重轉向的動(dòng)作,因此它比較適合生存在Web Server的執行過(guò)程中,以ASP.NET來(lái)說(shuō),使用HTTP Module即可處理這方面的工作(HTTP Handler較不適合)。

接者,設定處理HttpApplication.BeginRequest或是HttpApplication.AuthorizeRequest事件(多數的模組都是處理HttpApplication.AuthorizeRequest事件):


 
  1. public void Init(HttpApplication context)   
  2. {   
  3.      context.AuthorizeRequest += new EventHandler(AppAuthorizeRequest);   
  4. }  

然后再于事件常式中,呼叫HttpApplication.Context.RewritePath()即可:


 
  1. public void AppAuthorizeRequest(object sender, EventArgs e)   
  2. {   
  3.      (sender as HttpApplication).Context.RewritePath("~/MyHandler.aspx");   
  4. }  

然后,在Web.config中,將這個(gè)模組掛到system.web/httpModules設定中,若是IIS 7.0,則要設在system.webServer/modules中。


 
  1. <system.webServer>   
  2.      <validation validateIntegratedModeConfiguration="false" />   
  3.      <modules>   
  4.          <add name="UrlRewritingHandler" type="UrlRewritingModule" />   
  5.      </modules>   
  6. </system.webServer>  

然后執行這個(gè)Web Application,不論你輸入哪個(gè)URL路徑,都會(huì )被導向到MyHandler.aspx中(當然,你的專(zhuān)案中要有MyHandler.aspx這個(gè)網(wǎng)頁(yè))。

URL Rewriting其實(shí)技術(shù)上就是這樣而已,透過(guò)HttpApplication.Context.RewritePath()將要求的URL傳到指定的網(wǎng)頁(yè)來(lái)處理,然而在開(kāi)發(fā)實(shí)務(wù)上,URL Rewriting要考量的其實(shí)很多:

由于每個(gè)URL都會(huì )被處理,那如果URL指向的是圖片,檔案,scripts或其他資源時(shí)要如何處理? 是否有特殊要排除的路徑? 執行URL Rewriting時(shí),URL的格式要怎么設計才會(huì )符合需求? 由于URL被重寫(xiě)時(shí),<form>的action屬性會(huì )反應內部的URL,而不是外部的URL,此時(shí)要如何處理?

URL Rewriting對效能很要求,因為它要處理每一個(gè)URL要求,而不是選擇性不處理。

另外,URL也不是一定要硬性的做Rewriting,部份需要排除的就不需要做Rewriting,或者你有某種格式的URL是要做重導向(HTTP 302)的話(huà),也可以直接輸出HTTP 302訊息要求瀏覽器重導向即可,切記,不要在URL Rewriting中加太多的判斷條件,也不要在URL Rewriting中做太耗時(shí)間的事,那只會(huì )拖慢URL的處理速度(例如還要連資料庫存取資料這種事)。

發(fā)表評論 共有條評論
用戶(hù)名: 密碼:
驗證碼: 匿名發(fā)表