2013-05-06 49 views
5

在我web.config文件我已經指定了一些自定義錯誤:自定義錯誤頁不涵蓋所有URL路徑

<customErrors mode="RemoteOnly" defaultRedirect="~/Error"> 
    <error statusCode="500" redirect="~/Error" /> 
    <error statusCode="404" redirect="~/NotFound" /> 
</customErrors> 

現在,一些環節,如http://mysite.com/dsflhsdff將被重新導向至mysite.com/notfound。但一些鏈接,如https://mysite.com/videoconference/0/0/0由服務器本身處理 - 而不是我的自定義錯誤頁面,我得到IIS錯誤頁面(找不到文件或目錄)。在例如這個鏈接 - https://scyk.pl/forums/0/0/0將產生適當的404錯誤(我的自定義錯誤頁面)。

這裏發生了什麼?我是否需要手動設置IIS自定義錯誤?如果是這樣,我該怎麼做?

回答

0

如果頁面調用不通過asp.net引擎,那麼是的是由IIS處理。

您可以這樣做setup very easy if you have direct access to the iis,但IIS可讓您選擇設置此自定義錯誤,也可直接從您的網站的web.config中設置。下面是404錯誤的例子:

<system.webServer> 
    <httpErrors> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/PageNotFound.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

更多信息在:http://www.iis.net/configreference/system.webserver/httperrors

1

這是因爲ASP.NET甚至從未知道有一直爲.htm頁的請求。 IIS將自行處理.htm頁面,而不涉及ASP.NET。

你可以得到你的自定義頁面在以下兩種方式之一顯示:

獲取ASP.NET處理的.htm頁:在IIS中右擊你的網站/虛擬目錄 - >屬性 - >主目錄/虛擬目錄選項卡 - >「配置」按鈕下的「應用程序設置」部分 - >添加映射。 爲IIS設置自定義錯誤頁面:在IIS中右鍵點擊您的網站/虛擬目錄 - >屬性 - >自定義錯誤標籤 - >將404錯誤設置爲頁面錯誤頁面。

1

您也可以處理此錯誤在Global.asax文件中的Application_Error方法

例如

void Application_Error(object sender, EventArgs e) 
    { 
     // Code that runs when an unhandled error occurs 
     Exception exc = Server.GetLastError(); 

     // Handle HTTP errors 
     if (exc.GetType() == typeof(HttpException)) 
     { 
      // The Complete Error Handling Example generates 
      // some errors using URLs with "NoCatch" in them; 
      // ignore these here to simulate what would happen 
      // if a global.asax handler were not implemented. 
      /*if (exc.Message.Contains("NoCatch") || exc.Message.Contains("maxUrlLength")) 
       return;*/ 

      //Redirect HTTP errors to HttpError page 
      /*Server.Transfer("HttpErrorPage.aspx");*/ 
     } 
    } 

更多信息: http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling

0

這是發生,因爲IIS是無法找到在某些情況下,您的自定義錯誤頁。這發生在我的某些擴展上,但通過在IIS管理器的錯誤頁面部分中配置自定義錯誤頁面,我每次都能夠打開自定義錯誤頁面。

繼承人如何做到這一點:

進入您的IIS管理器,然後選擇有問題的網站,找到有權根據IIS部分「錯誤頁面」的圖標。

雙擊圖標後,您將看到狀態碼列表以及相應的文件負責提供錯誤。

找到錯誤代碼,在你的情況下404(如果它不存在,你可以通過點擊'Add ...'從右側菜單中添加它),然後點擊'Edit ...'按鈕在右側菜單中。

接下來,單擊您已出現的對話框中的'在此站點上執行URL'單選按鈕。以下是您提供用戶將被重定向到的相對URL的位置。

你已經完成了編輯對話框中的選項後,你會想選擇在主錯誤頁面痛你的網頁再次,只是這一次點擊「編輯功能設置...」

在您提供的編輯錯誤頁面設置,請確保選中「本地請求的詳細錯誤和遠程請求的自定義錯誤頁面」。還要確保您在之前的編輯菜單中輸入的頁面被輸入到編輯錯誤頁面對話框的默認頁面部分的路徑字段中。最後,路徑類型必須設置爲'執行URL'