MVC實現僞靜態

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" }
           );
        }
可是不是這麼簡單,瀏覽器意外的報了 http 404錯誤

最後分析得知,可能是ASP.NET認爲html文件是靜態文件,沒有必要進入我們的路由系統,直接指向了物理路徑,所以報了一個404錯誤,那麼我們怎麼來解決這個問題呢?
一開始我嘗試讓所有的後綴名都進入asp.net的管道,好我們在webconfig的 system.webServer配置節下的modules節點添加runAllManagedModulesForAllRequests="true",
就是讓所有的請求都經過httpModules,大功告成


到這裏是不是真的結束了,有沒有同學想到,本來物理文件是不應該經過asp.net管道的,如果所有的圖片和CSS,JS文件都經過ASP.NET管道,那我們的引用程序的性能會受到很大的影響,最後我想到我們只讓後綴名是.html的文件進入管道,如果有其他真實存着的.html結尾的物理文件存着,我們可以讓路由忽略他(怎麼做我就不說了),



這樣,我們的應用程序就可以實現僞靜態了,我們總是要比別人想的多一點,用最好的方法完成同樣的功能


<轉載請註明:來自於侯文成的CSDN博客(勵志成爲最優秀的系統架構師的程序員)>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章