2010-12-20 74 views
10

在我的ASP.NET 3.5的網站,發表在共享的託管服務提供商,我已經配置我的web.config文件是這樣的:爲什麼在web.config中設置customErrors在這種情況下不起作用?

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> 
     <error statusCode="403" redirect="AccessDenied.htm"/> 
     <error statusCode="404" redirect="FileNotFound.htm"/> 
    </customErrors> 

如果用戶請求的頁面不存在(如「WWW .example.com/NotExistPage.aspx「),用戶將按照我們的預期重定向到FileNotFound.htm頁面。

但是,如果用戶要求像一些地址:沒有.aspx擴展名 「www.example.com/NotExistDirectory」,用戶會遇到IIS 7.5錯誤頁面:

HTTP錯誤404.0 - 未找到 您正在尋找的資源已被刪除,更名爲 ,或暫時無法使用 。

Detialed錯誤信息:

Module IIS Web Core 
Notification MapRequestHandler 
Handler StaticFile 
Error Code 0x80070002 

Requested URL http://www.example.com:80/NotExistDirectory 
Physical Path D:\Websites\example\example.com\wwwroot\NotExistDirectory 
Logon Method Anonymous 
Logon User Anonymous 

這是一個黃色網頁是不是用戶友好的,我們沒有想到的。

我想知道在webconfig中設置customeError不支持這種類型的地址或不?我怎樣才能防止用戶看到這個黃頁。

編輯: 感謝戴維的回答,但我找到了實際的原因和正確的解決方案。請看我的答案。

回答

9

@Mostafa:我面臨完全相同的問題。我發現它可以通過添加以下到web.config文件來解決:

<system.webServer> 
    <httpErrors errorMode="Custom"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
    </system.webServer> 
+0

謝謝,這對我有效,我失蹤errorMode =「自定義」 – Raver0124 2014-04-17 05:07:20

+0

對於新的讀者,最後我找到了實際的原因和完整的解決方案,你可以看看我的回答 – Mostafa 2017-06-29 12:19:10

+0

不工作,我得到 此xxx.com頁面無法找到 沒有找到該網址的網頁:https://xxx.com/aaaaa HTTP ERROR 404 – Toolkit 2017-12-29 12:26:44

1

這是因爲ASP.Net模塊被配置爲處理某些文件擴展名。 IIS確定.aspx必須由ASP.Net模塊處理,然後web.config(甚至web.config本身)中的customerrors部分啓用。

由於您請求的頁面甚至未配置爲ASP .Net,IIS自己處理它而不傳遞請求。

+0

如何解決這個問題,我自己面臨同樣的問題? – 2010-12-20 08:23:48

+2

http://www.braintrove.com/article/46/page/2 - 嘗試本文將解釋如何爲IIS配置自定義頁面。您可能還想在IIS管道上刷新自己。 – 2010-12-20 08:40:55

0

首先,目錄url必須posess斜線,否則它只是一個擴展名的文件。 www.mysite.com/NotExistDirectory/
其次,ASP.net IIS模塊僅用於ASP MIME類型的處理程序,因此目錄對於Web服務器是剩餘的。 三,customerror是system.web的一部分,是ASP.net配置的一部分
而httperror是system.webserver的一部分,是IIS配置的一部分。
假設http模塊默認在IIS配置中,httperror將對非現有目錄的定製錯誤起作用。

0

這很有趣,幾年後我突然想出了什麼問題。

感謝@大衛的解決方案,但原因和完整的解決方案是爲波紋管:

通過設置customErrors模式「On」只有當我們在ASP.NET應用程序中獲得一個異常,而當我們努力工作要達到nonExistingdirectorynotExsitingStaticResouce,IIS會呈現404錯誤,並且不會直接通過IIS到達asp.net運行時和serverd。

所以我們需要在Web.config中爲IIS添加configuraiton波紋管:

<system.webServer> 
    <httpErrors errorMode="Custom"> 
     <remove statusCode="404"/> 
     <error statusCode="404" path="~/404.html" responseMode="File" /> 
    </httpErrors> 
    <system.webServer> 

它設置responseMode爲「File」,否則狀態代碼會自動將改變從404到200是非常重要的。所以從客戶的角度來看,他們並沒有得到實際的404狀態碼。

相關問題