溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

發(fā)布時間:2020-10-16 15:01:45 來源:億速云 閱讀:249 作者:小新 欄目:編程語言

這篇文章主要介紹了ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

產(chǎn)生404的原因主要有以下:

1.瀏覽器和爬蟲:某些瀏覽器會請求網(wǎng)站的favicon.ico,而如果你的網(wǎng)站根目錄下沒有這個文件,那么瀏覽器會有一條404的log,同樣搜索引擎會請求robots.txt。但這個影響不大。

2.用戶輸入了錯誤URL:某些用戶不小心在瀏覽器地址欄加了一個字符或者刪除了一個字符,導致服務器找不到請求的路徑。

3.某些網(wǎng)站引用的地址過老:某個頁面已經(jīng)被刪除,而其他網(wǎng)站依然引用,他人點擊的時候服務器找不到請求的路徑。

404與SEO:

本網(wǎng)站由于經(jīng)過改版,所以有很多失效的鏈接,而我也提交了死鏈給百度,但過了半個月也不見百度刪除那些失效的鏈接。后來我用站長工具查詢那些鏈接的HTTP狀態(tài),發(fā)現(xiàn)竟然返回的是302,這就難怪了。

為了給用戶友好的體驗,我制作了404頁面,并且在Application_Error中捕獲404,然后Response.Redicet()到404頁面。那時候因為不懂SEO,以為這就算做了404頁面。結果發(fā)現(xiàn),這樣是做了一個302跳轉(zhuǎn),這樣404的狀態(tài)碼就變成了302,而搜索引擎Spider請求的時候,返回的是302的話,它就會認為你這個網(wǎng)頁是正常的!導致網(wǎng)站的失效鏈接一直不被搜索引擎刪除,久而久之,網(wǎng)站的死鏈過得,就會得到搜索引擎的懲罰。所以,正確的404跳轉(zhuǎn)應該是返回友好頁面給用戶的同時,返回404的HTTP狀態(tài)碼給Spider。

ASP.NET中404跳轉(zhuǎn)的解決方案:

上一篇講了ASP.NET中自定義錯誤頁的三種方法,這里就不多說了!

使用的是第三種httpErrors也就是IIS錯誤頁,原因如下:

  1. Application_Error:好像比較難做到404跳轉(zhuǎn)的同時又返回404狀態(tài)碼,一般會返回302;

  2. customErrors:博主嘗試使用的時候,失敗了,學藝不精啊,哎;

  3. httpErrors:博主嘗試使用的時候,碰巧解決了,所以就是它了;

下面就來講具體如何操作!

IIS錯誤頁的使用又分三種情況:

1.返回靜態(tài)文件  2.返回動態(tài)頁面  3.302重定向。

其中3直接忽略。

1.返回靜態(tài)文件    

使用此方法,需要準備一個靜態(tài)html頁面,然后放在硬盤里,指定路徑的時候須給出絕對路徑。

web.config中的寫法

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="D:\ErrorPage\404.html" responseMode="File" />
  </httpErrors>
</system.webServer>

prefixLanguageFilePath表示客戶端語言的文件目錄,path表示文件相對于客戶端語言目錄的路徑,responseMode表示響應類型,這里是File(文件)

IIS中的操作

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

兩者選其一即可

由于博主嘗試使用文件的時候以失敗告終,所以這里不多說,說多了都是淚!

2.返回動態(tài)頁面

web.config中的寫法

</system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage/NotFound" responseMode="ExecuteURL" />
  </httpErrors>
</system.webServer>

與上面不同的就是responseMode="ExecuteURL"。

IIS中的操作

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

兩者選其一即可

博主最后選擇的這種方法,但是這種方法有幾個坑需要注意!

1.不能指定網(wǎng)站相對目錄下的靜態(tài)HTML文件,比如404.html。

2.指定的動態(tài)頁面cshtm、aspx等,需指定響應碼為404。

以上兩種情況如果不注意,那么你的404返回的響應碼不是404也不是302而是200。

因為這種方法是返回網(wǎng)站根目錄下的一個網(wǎng)頁來作為404頁面,而靜態(tài)頁面只要能訪問到,那肯定就是200了。動態(tài)cshtml或者aspx如果沒指定響應碼,那么返回200也不奇怪。

所以說具體做法如下(以ASP.NET MVC為例):

public class ErrorPageController : Controller
{
  public ActionResult NotFound()
  {
    Response.Status = "404 Not Found";
    Response.StatusCode = 404;
    return View();
  }
}

建一個控制器ErrorPage,里面可以定義各種錯誤頁面,這里只是404頁面。

然后建一個NotFound視圖,把404頁面寫漂亮一點。

OVER。

這個時候再去請求不存在的路徑。

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例

完美解決!

感謝你能夠認真閱讀完這篇文章,希望小編分享ASP.NET MVC實現(xiàn)404跳轉(zhuǎn)的案例內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI