1.什麼是偽靜態?為什麼要實現偽靜態?
偽靜態:動態網頁通過重寫url的方法實現去掉動態網頁的引數,但在實際的網頁目錄中並沒有必要實現存在重寫的頁面。
例如:我們當訪問位址http://*/2529259.html時,你會認為在站點伺服器下存在名為2529259.html檔案,其實實際上它可能是不存在的,而可能你看到的內容是通過重定向/archive/article.aspx?year=2012&month=06&day=05&id=2529259顯示出來的。
為什麼要這樣做呢?
(1)增強url的友好性,方便使用者記憶url。
(2)提高搜尋引擎抓取,很多搜尋引擎更看好靜態html頁。
(3)加強安全性,因為隱藏了引數」year」、」month」、」day」、」id」,使**沒有那麼容易受到攻擊。
以上內容摘選自:asp.net偽靜態實現
(2)為需要偽靜態的方法新增特性路由
筆者是news action需要實現偽靜態。
[route("(3) 在web.config中,為*.html路徑配置處理程式。~/news")]
[route(
"~/news/.html
")]
在這裡筆者需要給大家科普一下,網上有很多帖子都是直接在web.config配置節中新增這樣一句配置**。在前面asp.net mvc5 偽靜態 webform中作者也是這麼做的,但是我們是不推薦使用這種方式。因為它有較大的效能損失。
我會在本文解釋一下原因,想深入**的朋友可以參考:link
大家可以看上圖,這是iis 7.0的處理機制,大家可以看到executehandler這個部分,預設情況下的話是通過這樣乙個機制來處理,如果我們使用這個配置項,那麼不管是cgi、靜態檔案都是通過isapi也就是我們的asp.net程式來執行,一些js檔案、css檔案或者都會走我們的asp.net程式,那麼將會造成很多效能損失,這是我所在乎的乙個原因,當然還有關於iis身份驗證等問題。有興趣的朋友可以參考這篇文章:link
所以基於上面這樣一些原因,我們使用單獨配置只對*.html進行配置,那麼其它靜態檔案都是走iis 7.0預設處理程式,只有需要達到偽靜態的.html才進入asp.net進行處理。以下是配置節。
"大家可以發現我分別新增了static64、static32、(static) extensionlessurlhandler-integrated-4.0三個配置,其中主要的功能就是將*.html為後戳的請求交給aspnet_isapi進行處理。關於該配置節的具體資訊,大家可以參考msdnstatic64
" path="
*.html
" verb="
get,head,post,debug,put,delete,patch,options
" modules="
isapimodule
" scriptprocessor="
c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_isapi.dll
" precondition="
classicmode,runtimeversionv4.0,bitness64
" />
"static32
" path="
*.html
" verb="
get,head,post,debug,put,delete,patch,options
" modules="
isapimodule
" scriptprocessor="
c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll
" precondition="
classicmode,runtimeversionv4.0,bitness32
" />
"(static) extensionlessurlhandler-integrated-4.0
" path="
*.html
" verb="
get,head,post,debug,put,delete,patch,options
" type="
system.web.handlers.transferrequesthandler
" precondition="
integratedmode,runtimeversionv4.0
" />
(4) 驗證
已經可以正常訪問,通過我們的偽靜態請求,完成了專案需求。
mvc做專案的過程中不是所有的請求都是對映到controller的action,有時候我們也需要提供,css,js,html這些靜態檔案。當我們的web伺服器接收到乙個mvc的路由url的時,預設是會檢查對應的資源檔案在是否在硬碟中存在,如果存在就直接返回,不會走去路由表中找,也就不會走路由流程。現在做**越來越重視seo了,雖然mvc頁面的路由的ulr比原來的.aspx對seo好,但是.html對seo是最好的。所以很多人還是會採用mvc的偽靜態。
用mvc的偽靜態url寫成xx.html的下形式更利於seo,一般有兩種方法:
1、registerroutes中加入
routes.routeexistingfiles = true;2、繼承routebase類自定義乙個customroute類,重寫getroutedata方法,最後在registerroutes中加入下面**:
routes.add(new customroute(dicpattern));最近遇到乙個問題,我們要放乙個資料夾,裡面放一些靜態html檔案。我們輸入html的全路徑「/subject/index.html」這樣的url時會直接返回index.htm的內容。但是如果輸入是「/subject/」這樣的url就不會返回index.html的,即使我們在iis中將index.html配置了預設的起始頁面。
解決辦法:
在global中的registerroutes方法中加入下面**:
routes.ignoreroute("表示,路由忽略subject目錄下面的所有的檔案,這樣設定的index.html為預設頁面有可以了。最後輸入「/subject」和「/subject/」都可以返回index.html了。subject/*
");
**於
mvc實現偽靜態
也不知道我寫的算不算的偽靜態,反正是可以更改url的字尾名 新手,見諒 首先新增乙個testroute類 然後在我們的global檔案裡定義我們自己的路由規則 protected void public static void registerroutes routecollection route...
mvc 路由偽靜態實現
很多 都採用偽靜態,例如以html shtml等結尾的url,mvc的路由可以輕鬆實現。mvc的路由原理是從上往下匹配的,所以只需要在後面新增自己配置的路由即可 public static void registerroutes routecollection routes axd routes.m...
mvc 路由偽靜態實現
很多 都採用偽靜態,例如以html shtml等結尾的url,mvc的路由可以輕鬆實現。mvc的路由原理是從上往下匹配的,所以只需要在後面新增自己配置的路由即可 public static void registerroutes routecollection routes axd routes.m...