MVC自定義錯誤頁404靜態頁

2022-06-22 07:57:13 字數 2254 閱讀 2386

昨天公司要求給所有專案新增自定義404錯誤頁,具體的要求實現的有以下幾點:

1.實現自定義錯誤(如各種error,404等)跳轉到指定的頁面

2.所指定的頁面輸出的http狀態值必須是404或其他指定的statecode

3.跳轉到的自定義錯誤頁面必須是.html字尾結尾

關於第一點,這個很簡單,大家都知道,只需要在webconfig裡面對customerrors節點作相應設定,如下

由於真正的html靜態頁輸出的http狀態值只能是200(ok),所以,為了使輸出的statuscode為404或其他值,必須將它偽靜態化,在mvc裡,將乙個html頁實現偽靜態的效果也很簡單,只需要對路由做些配置,在global.aspx.cs檔案裡

/// /// 路由控制

#region 錯誤頁路由

routes.maproute(

"404notfund",// route name

"404notfond.html",// url with parameters

new// parameter defaults

);routes.maproute(

"error",// route name

"error.html",// url with parameters

new// parameter defaults

);#endregion

}

在這裡,我們將兩個自定義錯誤頁的路由都指向了errorcontroller下的名為error的action,接下來,就需要告訴這個action對外輸出的statuscode

public class errorcontroller : controller 

}

這裡,我們指定它輸出的statuscode為404,接下來,你就可以去粉飾你真正的404自定義錯誤頁,也就是這個action輸出的頁面views/error/error.aspx

這些都做完之後,你就可以在本地開始除錯看看效果了,不過在除錯之前,一定要將專案裡error.html和404notfond.html頁面刪掉,因為,在mvc預設設定中,如果訪問路徑url中的靜態檔案在專案中存在,它會優先取靜態檔案,從而繞過了路由,那麼此時你的global裡對這些靜態檔案路由的設定將毫無用處

確保你的專案裡不存在相同路徑下同名的靜態檔案後,在本地除錯,應該可以就達到預期效果了

不過,當我把專案部署到伺服器的iis7上的的時候,發現在本地訪問伺服器上的,始終出來的都是

並不是我指定的自定義錯誤頁,但是在本地除錯程式,以及用伺服器上的瀏覽器開啟看卻又是正常的,所以,我懷疑是iis在搞鬼

經過大半個下午的掙扎思索,最終讓我找到了乙個關鍵點,在iis的站點設定裡

有一項關於「錯誤頁」的設定

右鍵404——》編輯功能設定

點選開啟

預設設定的是「本地請求的詳細錯誤和遠端請求的自定義錯誤」,這個意思是,如果本地開啟(在伺服器用瀏覽器開啟)它展示的是詳細錯誤,如果是遠端請求(外網訪問伺服器)它展示的是自定義錯誤頁,而它(iis)理解的自定義錯誤頁是

這樣一來,就好理解了,知道該怎麼辦了

辦法有三個,一是「編輯錯誤頁設定」面板裡設為始終展示「詳細資訊」,二是「編輯自定義錯誤頁」面板裡修改檔案路徑到你自定義的html錯誤頁

三是在webconfig的節點裡新增

有的時候,由於伺服器iis給的許可權不夠大,還不足以修改httperrors裡的配置,這個時候需要在伺服器上以管理員的身份執行一下命令來解禁:

三個方法任選其一,有時也可能需要混合使用,具體是情況而定

YII 怎樣顯示靜態頁 自定義錯誤頁

在controller中加入,如sitecontroller public function actions 2.protected views controllerid pages加入靜態頁如about.php,如sitecontroller對應.protected views site page...

MVC3 自定義的錯誤頁

asp.net mvc3中如果配置檔案出錯了,怎麼跳轉到自定義的錯誤頁,現在參考網上的檔案是說 新增 如下配置檔案,並且在路徑views shared 下新增error頁面,測試下沒有用的,請大家看看有什麼好的建議啊,謝謝了啊!mvc根本不會理睬web.config中的customerrors,預設...

thinkphp自定義404頁面

使用emptycontroller empty方法。當我們使用thinkphp框架對外提供服務時,如果不採取特殊配置,當乙個請求沒有訪問到服務端資源,會直接返回404,並且由於thinkphp的特性,會返回乙個帶有thinkphp個性色彩的404頁面。這樣的頁面至少有兩點不太好 1 暴露了服務端的技...