遇到這樣一個問題:使用asp.net4.0+asp.net mvc2開發時候,將首頁產生為靜態default.htm檔案,但部署到IIS7上,使用asp.net4.0 Classic線程池,
會出現404, IIS的預設文件也包括default.htm這個檔案。
百思不得其解之後估計是System.Web.Routing的問題,將首頁預設為 /Home/Index 了。如果在 /Home/Index 添加跳轉代碼:
HttpContext.Current.Response.Redirect("default.htm");
這表明上解決問題,但訪問www.0592jia.com的時候會跳轉到www.0592jia.com/default.htm , 這對SEO影響是非常大的,甚至沒人願意跟你換連結。
所以只能通過一個方法,讓當前請求的路徑 與 預設的路由表無法匹配。這樣就會讀到default.htm這個預設文件了!
全域設定檔的預設路由代碼如下:
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } );
正是由於上面的路由,導致IIS將/Home/Index做為了首頁,如果我們將action="Index"修改為action="IndexPage"
那麼結果還是一樣的,為什麼呢?因為還是能夠與這條路由匹配。解決方案只有讓請求路徑與路由不匹配!
聰明的您一定想到了,我們應該通過對路由加上約束使其不匹配
修改後的預設路由為:
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "1", id = "" }, new { controller="[A-Za-z]+",action = "[A-Za-z]*" } );
我們讓預設的action的值1與約束的正則不匹配,也就讓請求路徑與這條路由不匹配。問題完美解決!
原創文章轉載請註明出處:http://www.ops.cc/archive.aspx/view/aspnet4-default/