2009-12-07 84 views
1
工作

我接着對如何設置404忠告:獲取所有404對IIS6

http://www.andornot.com/about/developerblog/archive/2009_10_01_archive.aspx

及相關:

Best way to implement a 404 in ASP.NET

從Global.asax中:

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    if (exception is HttpUnhandledException) 
    { 
     if (exception.InnerException == null) 
     { 
      Server.Transfer(string.Format("~/Error.aspx", false)); 
      return; 
     } 
     exception = exception.InnerException; 
    } 

    if (exception is HttpException) 
    { 
     if (((HttpException)exception).GetHttpCode() == 404) 
     { 
      Server.ClearError(); 
      Server.Transfer("~/404.aspx", false); 
      return; 
     } 
    } 

    if (Context != null && Context.IsCustomErrorEnabled) 
    { 
     Server.Transfer(string.Format("~/Error.aspx"), false); 
    } 

} 

而且從Web.config文件:

<customErrors mode="On"/> 

它在測試(VS2010)時在本地很精美,但在生產(ISS6)中它只能用於aspx頁面。 http://mysite.se/foo.js讓我看看ISS 404頁面。 (「該頁無法找到」)

我缺少什麼?

回答

4

如果你不想設置通配符映射,或有ASP.NET處理所有靜態文件(一般表現很可能會說,你不這樣做),你需要在IIS 6配置爲發送404對的aspx處理錯誤的頁面。

  1. 打開IIS管理器,瀏覽到相關站點,右鍵單擊它並選擇屬性。
  2. 打開「自定義錯誤」選項卡。
  3. 向下滾動到404,選擇它,然後按「編輯...」。
  4. 將消息類型更改爲URL,並將其指向存在於服務器(即「/404.aspx」)上的文件

點4是關鍵 - 它需要指向一個存在的文件,否則IIS將恢復爲默認值。

2

Web.Config中指定的404處理程序只處理由ASP.NET運行時處理的文件,包括JavaScript文件在內的所有其他文件將由您在IIS設置中指定的404頁處理。這就是爲什麼你看到http://mysite.se/foo.js IIS生成的錯誤消息,而不是在Web.Config的自定義錯誤部分中指定的錯誤消息。

你可以,但是,這些映射文件類型的ASPNET_ISAPI.DLL讓他們通過您的自定義錯誤頁處理。

  1. 打開IIS管理器
  2. 選擇Web站點
  3. 點擊右鍵,在右鍵菜單中選擇 屬性
  4. 在擴展列找到 的.aspx,雙擊和 完整路徑複製到ASPNET_ISAPI.DLL。它 應該像 C:\ WINDOWS \ Microsoft.NET \框架\ V1.1.4322 \« ASPNET_ISAPI.DLL
  5. 單擊添加,粘貼在可執行文件框中
  6. 在擴展名框中鍵入html的路徑
  7. 確保選中檢查文件是否存在被 未選中
  8. 關閉所有對話框

here以獲取更多信息。