1 什么是偽靜態?
現在很多門戶網站或者各大電商平台的網站的鏈接最后都是.htm或者.htm結尾,那么他們的網頁真的是靜態的html嗎?拿京東來說,有無數個頁面都都Html,在商品每時每刻都可能被更新的情況下,那是不是要有專門的人員來修改html靜態頁面呢,可想而知當然不是,不管是javaweb還是asp.net的動態頁面絕對不是以.html結尾的。
2 為什么要實現偽靜態?
那么我們為什么要注重url的結尾呢,那就是SEO(Search Engine Optimization)--搜索引擎優化,雖然現在主流的搜索引擎都開始支持動態的url,可是我們的網站為了排名盡量靠前,我們還是要盡量符合搜索引擎的規則。
3 MVC如何實現偽靜態?
下面進入主題,我們大家都知道asp.net MVC的URL默認的都是 域名+控制器名稱+Action名稱,有的人說,直接在action后面加一個.html就好了,好我們就這么做了
- <span style="white-space:pre"> </span>public static void RegisterRoutes(RouteCollection routes)
- {
- routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- routes.MapRoute(
- name: "Default",
- url: "{controller}/{action}.html",
- defaults: new { controller = "Home", action = "Index" }
- );
- }
最后分析得知,可能是ASP.NET認為html文件是靜態文件,沒有必要進入我們的路由系統,直接指向了物理路徑,所以報了一個404錯誤,那么我們怎么來解決這個問題呢?
一開始我嘗試讓所有的后綴名都進入asp.net的管道,好我們在webconfig的 system.webServer配置節下的modules節點添加runAllManagedModulesForAllRequests="true",
就是讓所有的請求都經過httpModules,大功告成
到這里是不是真的結束了,有沒有同學想到,本來物理文件是不應該經過asp.net管道的,如果所有的圖片和CSS,JS文件都經過ASP.NET管道,那我們的引用程序的性能會受到很大的影響,最后我想到我們只讓后綴名是.html的文件進入管道,如果有其他真實存着的.html結尾的物理文件存着,我們可以讓路由忽略他(怎么做我就不說了),
這樣,我們的應用程序就可以實現偽靜態了,我們總是要比別人想的多一點,用最好的方法完成同樣的功能
