【Henry Liu】ASP.NET 2.0 中的URL 重寫技術

iDotNetSpace發表於2008-06-03

說明:當我在開發一個網站的時候,我遇到了這樣一個問題:

這是一個有多個子域的網站,如:support.henryliu.com,product.henryliu.com,service.henryliu.com,客戶想把這三個子站點指向同一個位置。他要實現無論何時,使用者請求support.henryliu.com/default.aspx時,henryliu.com/support/default.aspx會被執行。 也就是說,他想把henryliu.com/support/default.aspx這個地址隱藏起來,不讓使用者看到。我們把改變原始請求URL的這個過程叫做URL重寫。在這篇文章裡,我將闡述關於URL重寫的技術。

 

實現URL重寫的幾種方法?

l         利用Application_BeginRequestHttpContext類的Rewrite方法重寫URL,這種方法比較簡單易懂易用。

l         開發ASP.NET Http Module來達到同樣的目的

l         開發ISAPI過濾器來擷取請求完成重寫

 

在這裡,我們將就第一種方法來闡述URL重寫的實現

Application_BeginRequest 事件

它是HTTP管線處理被激發的第一個事件,是重寫URL的最佳地方

 

HttpContext

這個類包含有關Http的特定資訊,其中有Http Request,當然也有Response對像。

這個類裡面有一個Current靜態屬性,它裡面包含當前應用程的資訊。RewritePath方法是重寫URL的關鍵。在2.0中有四個簽名:

public void RewritePath(string path);

public void RewritePath(string path, bool rebaseClientPath);

public void RewritePath(string filePath, string pathInfo, string queryString);

public void RewritePath(string filePath, string pathInfo, string queryString, bool setClientFilePath);

 

按步就搬

 

1.         新建一個C# Web Application工程

2.         開啟WEB配置檔案,加入下列程式碼

【Henry Liu】ASP.NET 2.0 中的URL 重寫技術<appSettings>
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術
<add key="productsSite" value="products">add>
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術
<add key="servicesSite" value="services">add>
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術
<add key="supportSite" value="support">add>
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術
appSettings>
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術

 

我們把相對應的資料夾名稱放在這裡,在後面的程式碼中將用到。

3.         在工程裡新增三個資料夾,Products,Support Services

4.         在每個檔案裡面新增一個default.aspx頁面

5.         開啟Global.asax看看事件控制程式碼

 

【Henry Liu】ASP.NET 2.0 中的URL 重寫技術protected void Application_BeginRequest(object sender, EventArgs e)

6.         把下面的程式碼加到上述事件裡:


【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            string host, originalurl, newurl;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            host 
= Request.Url.Host;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            originalurl 
= Request.Url.PathAndQuery;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            
switch (host)
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            
{
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                
case "products.henryliu.com":
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    newurl 
= "~/" +
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    ConfigurationSettings.AppSettings[
"productsSite"]
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
+ originalurl;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
break;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                
case "services.henryliu.com":
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    newurl 
= "~/" +
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    ConfigurationSettings.AppSettings[
"servicesSite"]
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
+ originalurl;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
break;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                
case "support.henryliu.com":
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    newurl 
= "~/" +
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    ConfigurationSettings.AppSettings[
"supportSite"]
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
+ originalurl;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
break;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                
default:
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    newurl 
= "~/" +
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    ConfigurationSettings.AppSettings[
"supportSite"]
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
+ originalurl;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術                    
break;
【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            }

【Henry Liu】ASP.NET 2.0 中的URL 重寫技術            HttpContext.Current.RewritePath(newurl);


 

  讓我們再來看看這段程式碼:

 

首先我們用 Request.Url.Host 屬性得到主機名,如:support.henryliu.com,其次還要獲得當前路徑的查詢字串。Switch語句我們用來根據當前使用者的請求來判斷真正要執行的頁面請求。最後,我們呼叫RewritePath()方法重寫當前請求的URL

 

總節:在這篇文章裡我們可以學習到怎樣用Application_BeginRequest HttpContext.RewritePah()來重寫URL。這是一個快速實現實際請求頁面和我們看到的URL不同的方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-330943/,如需轉載,請註明出處,否則將追究法律責任。

相關文章