|
在IIS URL Rewriting 和 ASP.NET routing(上)中,我們針對(duì)IIS URL Rewriting 和 ASP.NET routing的理念和功能分別進(jìn)行分析并進(jìn)行對(duì)比,在清楚了這些基本原理和異同之后,我們?cè)撊绾卧?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用中挑選合適的URL優(yōu)化方案呢?在本文中,我們將對(duì)此進(jìn)行探討分析,并例舉幾種兩者協(xié)同應(yīng)用的案例。
本文翻譯自IIS官方網(wǎng)站,針對(duì)國(guó)內(nèi)慣用的術(shù)語(yǔ)進(jìn)行了部分調(diào)整。
我們?cè)撊绾芜x擇?
首先,如果我們的Web應(yīng)用程序有任何除了ASP.NET之外的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),那么選擇是絕對(duì)明顯的:用IIS URL重寫(xiě)模塊(IIS URL-rewrite module)。否則的話,主要判斷規(guī)則如下:
- 如果我們的ASP.NET Web應(yīng)用程序使用了ASP.NET MVC 或者 ASP.NET Dynamic Data 技術(shù)的話,請(qǐng)使用ASP.NET路由。我們的應(yīng)用程序URL優(yōu)化過(guò)程將從原生支持中獲益(ASP.NET MVC 和ASP.NET Dynamic Data直接包含ASP.NET Routing)。早期的ASP.NET 路由不支持WebForm,而目前的版本已經(jīng)支持標(biāo)準(zhǔn)的Web Form應(yīng)用程序了。詳見(jiàn)此地。
- 如果我們是基于一個(gè)已有的ASP.NET網(wǎng)站,而希望盡量不去更改它的話,請(qǐng)使用URL重寫(xiě)模塊。因?yàn)閁RL重寫(xiě)模塊能夠在不更改現(xiàn)有程序的基礎(chǔ)上對(duì)網(wǎng)站提供“用戶友好”“搜索引擎友好”的URL。同樣,它也允許我們創(chuàng)建重定向規(guī)則,用來(lái)重定向搜素引擎的爬蟲(chóng)到新的URL去。
然而在實(shí)踐中這兩種技術(shù)并不是只能選擇一個(gè),他們往往還可以相輔相成。在接下來(lái)的章節(jié)中,我們將概述幾個(gè)協(xié)同使用ASP.NET路由和URL重寫(xiě)模塊的案例。
為網(wǎng)站強(qiáng)制實(shí)施標(biāo)準(zhǔn)的URL
舉個(gè)例子,比如我們想強(qiáng)制使用http://www.mysite.com/home/about 來(lái)替代 http://mysite.com/Home/About。 當(dāng)客戶端請(qǐng)求一個(gè)不符合標(biāo)準(zhǔn)格式的URL時(shí),客戶端獎(jiǎng)杯跳轉(zhuǎn)到一個(gè)符合標(biāo)準(zhǔn)格式的URL。在這種情況下,我們可以使用URL重寫(xiě)模塊來(lái)強(qiáng)制URL跳轉(zhuǎn),而使用ASP.NET 路由來(lái)選擇一個(gè)handler來(lái)處理所請(qǐng)求的URL路徑。
下面的代碼展示了這個(gè)案例中可能用到的URL重寫(xiě)模塊配置代碼:
<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>
提供來(lái)自其它網(wǎng)站或其它服務(wù)器上的靜態(tài)內(nèi)容
例如,我們的網(wǎng)站部署在多臺(tái)服務(wù)器上,而動(dòng)態(tài)頁(yè)面的內(nèi)容部署在一臺(tái)服務(wù)器或一個(gè)網(wǎng)站上,而所有的靜態(tài)內(nèi)容部署在另一臺(tái)服務(wù)器或另一個(gè)網(wǎng)站上。這時(shí),我們可以使用URL重寫(xiě)模塊協(xié)同IIS Application Request Routing module 來(lái)將對(duì)鏡頭內(nèi)容的請(qǐng)求轉(zhuǎn)到靜態(tài)內(nèi)容服務(wù)器(網(wǎng)站)上去,而由當(dāng)前服務(wù)器處理所有的動(dòng)態(tài)網(wǎng)頁(yè)請(qǐng)求。這中環(huán)境下,ASP.NET 路由恰好只對(duì)所有的動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容起效,而不對(duì)靜態(tài)內(nèi)容其效果。
下面的代碼展示了這個(gè)案例中可能用到的URL重寫(xiě)模塊配置代碼:
<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>
靜態(tài)內(nèi)容管理
當(dāng)我們網(wǎng)站中的靜態(tài)內(nèi)容移動(dòng)到了一個(gè)新的地址時(shí),我們常常還需要支持老的URL,以做到向后兼容,甚至我們并不想讓用戶感覺(jué)到文件或文件夾移動(dòng)過(guò)了。這種情況下,我們可以使用URL重寫(xiě)模塊來(lái)重寫(xiě)靜態(tài)文件的路徑,同時(shí)使用ASP.NET路由來(lái)處理所有的動(dòng)態(tài)ASP.NET頁(yè)面。
下面的代碼展示了這個(gè)案例中可能用到的URL重寫(xiě)模塊配置代碼:
<rewrite> <rules> <rule name="Rewrite to new folder"> <match url="^Images/(.+)$" /> <action type="Rewrite" url="NewImages/{R:1}" /> rule> rules>rewrite>
阻止某些請(qǐng)求
URL重寫(xiě)模塊可以用來(lái)阻止某些情況下指定的請(qǐng)求,例如,我們可以阻止網(wǎng)站爬蟲(chóng)訪問(wèn)某些特定的URL路徑。這種情況下,我們讓被阻止的請(qǐng)求壓根不到達(dá)ASP.NET的路由處理,如此來(lái)減少服務(wù)器的負(fù)載。
下面的例子展示了如何配置URL重寫(xiě)規(guī)則,來(lái)阻止一個(gè)指定的網(wǎng)站爬蟲(chóng)。可以根據(jù)指定的user-agent HTTP頭或者IP地址來(lái)進(jìn)行阻止:
<rewrite> <rules> <rule name="Block SomeRobot" stopProcessing="true"> <match url="^folder1/folder2" /> <conditions logicalGrouping="MatchAny"> <add input="{USER_AGENT}" pattern="SomeRobot" /> <add input="{REMOTE_ADDR}" pattern="201/.45/.33/.[0-5]" /> conditions> <action type="AbortRequest" /> rule> rules>rewrite>
發(fā)展方向
盡管IIS URL重寫(xiě)和ASP.NET路由在功能上有一些重復(fù),但它們?cè)谇榫岸ㄎ簧虾图夹g(shù)上是相互獨(dú)立的。因此,這兩種技術(shù)將作為IIS的獨(dú)立組建持續(xù)存在并進(jìn)一步發(fā)展,并且,兩者有很大的集成潛力。例如,ASP.NET路由可能會(huì)參照URL重寫(xiě)模塊強(qiáng)大的管理工具。而URL重寫(xiě)模塊可能會(huì)與ASP.NET更好的集成,以提供更強(qiáng)大的擴(kuò)展性和可自定義性。
結(jié)論
IIS URL重寫(xiě)和ASP.NET路由都能夠用于Web應(yīng)用程序的URL優(yōu)化處理,但ASP.NET路由可以看作是一種ASP.NET的優(yōu)化解決方案,因此,它是web開(kāi)發(fā)人員設(shè)計(jì)友好URL的應(yīng)用程序時(shí)的好選擇。而IIS URL重寫(xiě)模塊是一個(gè)通用的URL處理機(jī)制,定位于多種技術(shù)場(chǎng)景,特別是它能夠讓web開(kāi)發(fā)人員和網(wǎng)站管理人員能夠在不改動(dòng)程序代碼的情況下優(yōu)化URL。
相關(guān)文檔
- URL-rewrite module documentation and tutorials
- ASP.NET routing documentation
- ASP.NET MVC
- ASP.NET Dynamic Data
參考閱讀
- Using URL Rewrite Module
- Provide URL Rewriting Functionality
- Rule with Rewrite Map - rule template
- IIS URL Rewriting and ASP.NET routing
NET技術(shù):IIS URL Rewriting 和 ASP.NET routing(下),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。