在IIS URL Rewriting 和 ASP.NET routing(上)中,我們針對IIS URL Rewriting 和 ASP.NET routing的理念和功能分別進行分析並進行對比,在清楚 了這些基本原理和異同之後,我們該如何在應用中挑選合適的URL優化方案呢? 在本文中,我們將對此進行探討分析,並例舉幾種兩者協同應用的案例。
我們該如何選擇?
首先,如果我們的Web應用程序有任何除了ASP.NET之外的動態網頁技術,那 麼選擇是絕對明顯的:用IIS URL重寫模塊(IIS URL-rewrite module)。否則 的話,主要判斷規則如下:
1. 如果我們的ASP.NET Web應用程序使用了ASP.NET MVC 或者 ASP.NET Dynamic Data 技術的話,請使用ASP.NET路由。我們的應用程序URL優化過程將 從原生支持中獲益(ASP.NET MVC 和ASP.NET Dynamic Data直接包含ASP.NET Routing)。早期的ASP.NET 路由不支持WebForm,而目前的版本已經支持標准的 Web Form應用程序了。詳見此地。
2. 如果我們是基於一個已有的ASP.NET網站,而希望盡量不去更改它的話, 請使用URL重寫模塊。因為URL重寫模塊能夠在不更改現有程序的基礎上對網站提 供“用戶友好”“搜索引擎友好”的URL。同樣,它也允許我們創建重定向規則 ,用來重定向搜素引擎的爬蟲到新的URL去。
然而在實踐中這兩種技術並不是只能選擇一個,他們往往還可以相輔相成。 在接下來的章節中,我們將概述幾個協同使用ASP.NET路由和URL重寫模塊的案例 。
為網站強制實施標准的URL
舉個例子,比如我們想強制使用http://www.mysite.com/home/about 來替代 http://mysite.com/Home/About。 當客戶端請求一個不符合標准格式的URL時, 客戶端獎杯跳轉到一個符合標准格式的URL。在這種情況下,我們可以使用URL重 寫模塊來強制URL跳轉,而使用ASP.NET 路由來選擇一個handler來處理所請求的 URL路徑。
下面的代碼展示了這個案例中可能用到的URL重寫模塊配置代碼:
<rewrite>
<rules>
<rule name="Enforce canonical hostname" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.mysite\.com$" />
</conditions>
<action type="Redirect" url="http://www.mysite.com/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
提供來自其它網站或其它服務器上的靜態內容
例如,我們的網站部署在多台服務器上,而動態頁面的內容部署在一台服務 器或一個網站上,而所有的靜態內容部署在另一台服務器或另一個網站上。這時 ,我們可以使用URL重寫模塊協同IIS Application Request Routing module 來 將對鏡頭內容的請求轉到靜態內容服務器(網站)上去,而由當前服務器處理所 有的動態網頁請求。這中環境下,ASP.NET 路由恰好只對所有的動態網頁內容起 效,而不對靜態內容其效果。
下面的代碼展示了這個案例中可能用到的URL重寫模塊配置代碼:
<rewrite>
<rules>
<rule name="Forward to static file server">
<match url="^.+\.(?:jpg|bmp|gif)$" />
<action type="Rewrite" url="http://static_file_server/ {R:0}" />
</rule>
</rules>
</rewrite>