網站設置404錯誤頁的經歷


  設置404錯誤頁的意義我就不說了。主要想記錄一下這次設置錯誤頁遇到的問題和解決方法。

第一版:本地測試能跳轉到自定義的404頁面,上線之后卻沒能跳轉。

  因為之前的項目有跳轉404頁面的例子,所以直接拷貝了一份到現在的項目,代碼如下:

HomeController

public ActionResult Index()
{
  Response.StatusCode = 404;
  Response.Charset = "utf-8";
  return View("404");
}

Web.config

    <customErrors defaultRedirect = "home/error" mode="On">
      <error statusCode="404" redirect="/home/error"/>
    </customErrors>

按照上面的代碼書寫,本地測試跳轉到了自定義的404頁,上線之后卻是默認的404頁。就這樣,第一個版本失敗了。

 

第二版:上線之后可以正常跳轉至404頁面,狀態碼卻返回302。

  開發中"本地環境可以,生產環境卻不行"的情況屢見不鮮。后來干脆在阿里雲租了一台服務器,這里有個小插曲,我發布了一個測試版本不能正常運行,

原因是這個"HTTP 錯誤 404.0 - Not-Found"。

  測試版本跑通之后,發現線上沒有跳轉自定義404頁的原因是沒有設置IIS。設置步驟如下圖:

1.找到IIS的404錯誤頁選項(IIS里還有ASP.NET的.NET錯誤頁,這里最好選IIS的錯誤頁,下面有寫原因)

2.打開錯誤頁后,編輯自定義錯誤頁,這里以相當路徑設置錯誤頁url(IIS的版本不一樣,編輯自定義錯誤頁的窗口也不一樣)

  設置OK之后,本以為大功告成,卻發現根本錯誤,返回狀態碼是302,"Response.StatusCode = 404"也沒強擼過來。

 

  至此,第二個版本還是失敗了。

 

第三版:利用httpErrors設置網站404頁跳轉(正確版本)

  之后了解到customErrors會以302重定向跳轉至自定義錯誤頁,雖然跳轉到了自定義錯誤頁,但狀態碼卻不對,並且url都會帶參數aspxerrorpath。

httpErrors只需要配置一下Web.config即可,配置好之后會自動映射到IIS:

Web.config

    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear />
      <error statusCode="404" path="Error\404.html" />
      <error statusCode="500" path="Error\500.html" />
    </httpErrors>

映射之后的IIS

  到這自定義404頁才算設置正確,用戶請求的錯誤的url會跳轉至自定義404頁,狀態碼返回404,並且保持原url。

 

分析:ASP.NET下的.NET錯誤頁和IIS下的錯誤頁有什么區別?

  在Web.config中,分別配置<customErrors>和<httpErrors>節點即可完成兩者錯誤頁的設置。主要有以下不同點:

1.從定義上,<customErrors>設置ASP.NET應用程序的錯誤;<httpErrors>是IIS7.0新增的特性,設置IIS對http請求的錯誤處理;

2.Visual Studio提供了一個脫離IIS但能執行ASP.NET的環境。想必<customErrors>就是為其准備的;

3.<httpErrors>優先級要高於<customErrors>。這也是"在本地可以,一上線就不行了"的一個原因。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM