1. 程式人生 > >ASP.NET MVC 實現偽靜態

ASP.NET MVC 實現偽靜態

javaweb 其中 col true 配置文件 forall 開關 添加 技術

1 什麽是偽靜態?

現在很多門戶網站或者各大電商平臺的網站的鏈接最後都是.htm或者.htm結尾,那麽他們的網頁真的是靜態的html嗎?拿京東來說,有無數個頁面都都Html,在商品每時每刻都可能被更新的情況下,那是不是要有專門的人員來修改html靜態頁面呢,可想而知當然不是,不管是javaweb還是asp.net的動態頁面絕對不是以.html結尾的。

2 為什麽要實現偽靜態?

那麽我們為什麽要註重url的結尾呢,那就是SEO(Search Engine Optimization)--搜索引擎優化,雖然現在主流的搜索引擎都開始支持動態的url,可是我們的網站為了排名盡量靠前,我們還是要盡量符合搜索引擎的規則。

3 MVC如何實現偽靜態?

通過修改配置文件和路由來實現。

在配置文件中找到system.webServer節點下面的modules節點,添加runAllManagedModulesForAllRequests="true",這是讓所有的請求包括靜態頁面和圖片,js等等都進入asp.net的管道。

然後設置路由配置:

技術分享圖片

這樣一來,就可以通過下面的URL來訪問頁面了,光看地址是靜態網頁的格式,但實際上還是動態的網頁。

技術分享圖片

但是runAllManagedModulesForAllRequests="true"這種方式是不好的。runAllManagedModulesForAllRequests就像 IIS Modules 和請求的一個通道開關,如果這個開關是打開的,那麽訪問此站點的所有請求都會進入 Modules 中進行處理,這其中就包含一些靜態文件的請求,這也是最常見的一種“沒必要處理”的請求,因為請求進入 Modules,那就要有相應的程序進行處理,這就造成沒必要的性能開銷,因為靜態文件只是獲取展示,完全沒必要進行 Modules 處理,小的站點無所謂,當一些很大 PV 站點也這樣做的時候,就會對 IIS 的 Modules 程序處理造成一些“壓力”

用這種方式做偽靜態後,如果有真的靜態頁面,一定不要將靜態頁面放在view文件夾下。否則會去執行controller裏面的action,從而導致無法找到資源。

ASP.NET MVC 實現偽靜態