在ASP.NET中如何?和利用URL重寫)

來源:互聯網
上載者:User
靈活的URL重寫可以讓你的網站增加可用性和專業性。在協助網站更好的被搜尋引擎索引收錄方面,這也是一個重要的因素。在本篇文章中,我將帶你瞭解如何在ASP.NET中簡單的實現URL重寫,以及一些常見問題的解決辦法。我還將說明為什麼URL重寫如此重要,以及如何使用它來增強你的網站。

什麼是URL重寫?

    URL重寫就是首先獲得一個進入的URL請求然後把它重新寫成網站可以處理的另一個URL的過程。舉個例子來說,如果通過瀏覽器進來的URL是“www.mysite.com/UserProfile/1.aspx”,那麼它可以被重寫成 “www.mysite.com/UserProfile.aspx?ID=1”這樣的URL,這樣的網址可以更好的被網站所閱讀。

    重寫URL是非常有用的一個功能,因為它可以讓你提高搜尋引擎閱讀和索引你的網站的能力;而且在你改變了自己的網站結構後,無需要求使用者修改他們的書籤,無需其他網站修改它們的友情連結;它還可以提高你的網站的安全性;而且通常會讓你的網站更加便於使用和更專業。關於它的好處,我將在本篇文章的“如何利用URL重寫”部分來詳細的說明。

如何?URL重寫

    URL重寫可以通過編程的方式來實現。ASP.NET中的Contex.RewritePath()方法可以讓你從程式中實現重寫請求的URL。一旦重寫後,系統將使用新的路徑來繼續執行這個請求。

    在Global.asax檔案的Application_BeginRequest()方法中,你需要增加代碼來閱讀進來的路徑,然後根據一個或多個URL重寫規則來成需要進一步處理的路徑。下面的例子執行以下URL重寫規則:

代碼清單1:使用Contex.RewritePath()實現URL重寫

void Application_BeginRequest(object sender, EventArgs e) 
{
String path = Request.Url.ToString();
if (Regex.IsMatch(path, "/URLRewriting/OldUrl.aspx",
RegexOptions.IgnoreCase))
{
Context.RewritePath("/URLRewriting/NewUrl.aspx");
}
else if (Regex.IsMatch(path, "/URLRewriting/UserAccount/(.+).aspx",
RegexOptions.IgnoreCase))
{
String idString =
path.Substring(path.LastIndexOf('/') + 1,
path.Length - path.LastIndexOf('/') - 6);
Context.RewritePath("/URLRewriting/UserAccount.aspx?id=" +
idString);
}
}

    在這個例子中,每次一個新的請求被處理的時候,它將首先查看這個Application_BeginRequest()。通過使用Request.Url屬性來獲得輸入的URL路徑,然後通過Regex來應用網站URL重寫規則,匹配到期望的輸入網址後,將它們重寫成你希望轉向的網址。

 

使用UrlRewriting.NET實現更強大的URL重寫

    當重寫規則比較簡單且規模比較小的時候,使用Context.RewritePath() 方法以編程的方式重寫URL效果比較不錯,但是一些大型網站通常有非常多的URL重寫規則。手工方式對所有這些重寫規則進行編程可能是一件麻煩且容易出錯的方法。

    一個更好的解決方案是從web.config檔案中使用一個HttpModule來動態處理URL重寫規則。更令人高興的是,你無需自己動手來編寫HttpModule來處理這些任務,已經有幾個非常不錯的免費版供你使用。以下是其中幾個:URLRewriting.Net ,
URLRewriter.Net ,Rewrite.Net 。

    在這篇文章中,我將使用URLRewriting.Net示範一個簡單的例子。在開始使用URLRewriting.Net之前,首先從URLRewriting.Net網站下載它,並把它放到你的網站的/bin檔案夾下。

    接下來,增加如下配置到你的web.config檔案中:

    代碼清單2:添加到web.config中的配置

<configSections> 
<section name="urlrewritingnet" requirePermission ="false"
type="UrlRewritingNet.Configuration.UrlRewriteSection,
UrlRewritingNet.UrlRewriter" />
</configSections>
<system.web>
<compilation debug="true"/>
<authentication mode="Windows"/>
<httpModules>
<add name="UrlRewriteModule"
type="UrlRewritingNet.Web.UrlRewriteModule,
UrlRewritingNet.UrlRewriter" />
</httpModules>
</system.web>

    現在,在web.config檔案中你可以增加下面的代碼並輸入你自己的URL重寫規則。它將實現以下URL重寫規則:

    代碼清單3:對URLRewriting.Net配置重寫規則

<urlrewritingnet 
rewriteOnlyVirtualUrls="true"
contextItemsPrefix="QueryString"
defaultPage = "Default.aspx"
defaultProvider="RegEx"
xmlns="http://www.urlrewriting.net/schemas/config/2006/07" >
<rewrites>
<add name="UserAccount"
virtualUrl="^~/UserAccountV2/(.+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/UserAccountV2.aspx?id=$1"
ignoreCase="true" />
<add name="Movies_Action"
virtualUrl="^~/Movies/Action.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Movies.aspx?MovieType=Action"
ignoreCase="true" />
<add name="Movies_Drama"
virtualUrl="^~/Movies/Drama.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Movies.aspx?MovieType=Drama"
ignoreCase="true" />
<add name="Movies_Comedy"
virtualUrl="^~/Movies/Comedy.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Movies.aspx?MovieType=Comedy"
ignoreCase="true" />
</rewrites>
</urlrewritingnet>

   如上面所看到的,當使用一個類似URLRewriting.Net的HttpModule的時候,你可以簡單的逐一把你的網站重寫規則插入到web.config檔案中,而不用編寫任何代碼。這樣,無論你的網站規模大小,管理這些URL重寫規則變成了一件非常容易的事情。

    值得一提的是,儘管我們這兒的例子非常簡單,URLRewriting.Net是一個強大的程式,它具有很多我這兒沒有用到的選項。完整的文檔和應用程式範例可以從URLRewriting官方網站查看。

 

處理回送資料(Postback)

    當在ASP.NET中使用URL重寫方法的時候,經常引發一個潛在的問題:在一個頁面回送資料給伺服器的時候,原先乾淨的輸入URL通常不會被儲存。舉個例子來說,你使用諸如“~/Movies/Action.aspx”之類的簡潔URL輸入了一個網址,但是當你點擊一個按鈕執行回送資料給伺服器的時候,這個網址將會變回實際的URL——“~/Movies.aspx?MovieType= Action”。

    問題的根源在於<form runat="server"> 標籤Action動作的屬性,它使用真實的URL而不是輸入的網址。

    解決這個問題的一個簡單的辦法是通過擴充繼承已有的form標籤來實現你自己的form標記版本。然後你可以設定其action為輸入的URL而不是重寫的那個。參看以下樣本:

    代碼清單4:定製的form標記可以處理URL重寫的資料回送

public class RewriteForm : HtmlForm { 

protected override void
RenderAttributes(System.Web.UI.HtmlTextWriter writer) {

// Name
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");

// Method
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");

this.Attributes.Render(writer);

// Action
String action = Context.Request.RawUrl;

if (action != null) {
writer.WriteAttribute("action", action);
}
base.Attributes.Remove("action");

// ID
if (base.ID != null) {
writer.WriteAttribute("id", base.ClientID);
}
}
}

    使用以上代碼,你現在可以使用<MyTags:RewriteForm ID="form1" runat="server"> 標記,而不用使用標準的<form id="form1" runat="server"> 標記,這樣即使在資料回送過程中,也將保持網址不變。

 

處理連結和Image/CSS網址

     當使用URL重寫的時候需要注意的很重要的一個問題是,被重寫後的頁面中的相對連結、圖片和CSS可能無法正常顯示,因為相對參照將成為輸入的URL而不時實際的URL。

    舉個例子來說,如果一個網站的首頁是“/home.aspx?lang=en”,具有一個相對位址的“mysitelogo.jpg”,但是這個頁面是被“/en/home.aspx”網址請求的,它具有一個“/en”目錄來顯示使用者希望訪問英文版的頁面,“mysitelogo.jpg”的相對連結變成了“/en/mysitelogo.jpg”;這當然是不正確的,因此這個映像將不會正確的顯示。

    為了確保這個映像和連結指向正確的網址,請你指定一個絕對路徑,例如“/mysitelogo.jpg”或者“www.mysite.com/mysitelogo.jpg”。另一個選擇是在你的連結前使用“~/”,也就是說“~/mysitelogo.jpg”。這樣它將自動展現你的檔案或連結的正確路徑。

修改副檔名

    你可以對你的網站進行的另一個更有意思的修改是,修改你的頁面的副檔名。例如,有的使用者希望修改“.aspx”副檔名為特定的副檔名,諸如“.x”或“.mysite”,甚至是“.jsp”或“.php”。這樣做有出於安全方面的考慮,也可以僅僅是為了增加你的網站的美觀性。

    要想修改你的網站頁面的副檔名,只需使用上面的URL重寫例子中的方法就可以,將包含“.mysite”的URL重寫指向一個“.aspx”網址。如果你使用諸如URLRewriting.NET之類的模組的話,實現這個改變更是一件輕鬆的事情。只需要在重寫規則的末尾加上一個重寫規則,舉個例子來說,重寫“~/(.+).mysite”為“~/(.+).aspx”。因為URL重寫規則是按順序執行的,所以將這條規則放在最後會捕獲所有頁面。

    還有需要注意的一點,當使用特定的副檔名的時候,確認要在IIS映射中配置這個新的副檔名。ASP.NET相關的副檔名(“.aspx”、“.asax”、“.config”、“.cs”等等)全部會被映射向aspnet_isapi.dll的ISAPI擴充。把你的新副檔名增加到相同的配置中。

如何利用URL重寫

   上面你已經花了不少時間瞭解了如何?URL重寫,現在你需要來看一下如何利用這個功能來完善你的網站。

   1、提高搜尋引擎閱讀和索引你的網站的能力

   搜尋引擎是根據URL來抓取和索引網站的。很多動態資料庫驅動的網站具有一些具有URL參數的動態URL,諸如像“www.mysite.com/UserProfile.aspx?ID=1”中的ID參數,搜尋引擎不能夠完全索引你的網站。通過修改網址成為像“www.mysite.com/UserProfile/1.aspx”之類的形式,你可以協助搜尋引擎更容易的索引你的網站。

    搜尋引擎通常還通過你的URL中的關鍵字來判斷你的網頁的相關性。有的時候,你可能希望在不用修改網站目錄架構的情況下,修改URL以更好的反映網頁的內容。

    讓你的網站更好的被搜尋引擎收錄雖然沒有什麼良丹妙藥或速成法,但是瞭解搜尋引擎的工作原理,然後根據它來最佳化你的網站,可能會帶來意想不到的效果。

    2、修改網站結構,卻不用要求使用者修改他們的書籤,也不用要求其他網站改變指向你網站的友情連結

    如果你想修改一個網頁的名稱,或者修改儲存網頁的檔案夾結構,將會給那些已經收藏了你的網頁的人和某些網站對你的友情連結帶來混亂。一個可行的解決方案就是使用URL重寫來透明的把使用者重新導向到正確的網頁。

    舉個例子來說,如果你有一個“www.mysite.com/main/sitecontacts.aspx”,使用者可能已經在書籤中收藏了這個地址,而你想修改它到“www.mysite.com/contacts.aspx”,你可以簡單的建立一個重新導向規則,當使用者在瀏覽器中輸入“www.mysite.com/main/sitecontacts.htm”的時候,被重新導向到“www.mysite.com/contacts.htm”頁面。

    3、提高網站安全性

    網址可以為駭客提供一些攻擊的線索,因為它們通常會暴露你的網站的內部工作機制。

    舉個例子來說,通過使用“.aspx”作為尾碼,你已經暴露給別人你正在使用ASP.NET架構。這樣一個潛在的駭客就掌握了一條如何攻擊你的網站的線索。URL重寫可以將副檔名改為“.x”或“.mysite”,從而可以讓攻擊者去猜測你的網站到底用的是什麼架構。

    另一個安全擔心是,在URL中顯示你的網站目錄和URL參數,通常會讓駭客獲得重要訊息來進行前端攻擊。通過這個資訊,他們可以通過修改參數,或直接存取相關目錄,從而暗中找出你的網站可能存在的一個安全性漏洞。URL重寫協助你隱藏這些資訊不被駭客所發現。

    不過值得注意的是,URL重寫只是網站的整體安全防護措施中的一小部分。簡單的隱藏了安全性漏洞並不意味著安全性漏洞已經不存在,因此確保詳細的測試你的網站的安全性,並修補安全性漏洞。

    4、提高網站可用性和專業性

    冗長、非方便使用的URL通常會給你的網站帶來可用性的問題。使用者不會總是從一個連結來訪問你的網站,很多時候要直接在瀏覽器中輸入你的網站網址,如果太長或不同意記憶的話,通常會讓使用者放棄對你的網站的訪問。而且在使用者討論網站的時候,也會給使用者的交流帶來一定的影響。

    無論是哪一種情況,保持一個網址簡單、簡練往往都是一個很好的想法。URL重寫可以有助於透明的實現這個操作,且不用改變底層的目錄結構和頁面名稱。

    好看好記的網址通常會增加網站的專業性和整體外觀感覺。從而讓你有機會展示你知道或正在做的事情。

結論

    本文中所介紹的方法和思想只是建造一個完美網站的整體解決方案中的一部分,但是我希望這篇文章可以讓你全面瞭解如何?以及為什麼URL重寫可以用來完善你的網站。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.