共用方式為


當您造訪裝載於 IIS 7.0 或更新版本的網站時出現的錯誤訊息:HTTP 錯誤 404.17 - 找不到

本文可協助您解決 HTTP 錯誤 404.17 - 當您瀏覽裝載於 網際網路資訊服務 (IIS) 7.0 或更新版本的網站時,找不到問題。

原始產品版本:網際網路資訊服務
原始 KB 編號: 2019689

徵兆

您有裝載於 IIS 7.0 或更新版本的網站。 當您使用網頁瀏覽器瀏覽至網站中的動態內容時,您可能會收到類似下列的錯誤訊息:

錯誤摘要
HTTP Error 404.17 - Not Found
要求的內容似乎是指令碼,靜態檔案處理常式未提供。
詳細的錯誤資訊:

Module StaticFileModule
通知 ExecuteRequestHandler
Handler StaticFile
錯誤碼0x80070032

要求的 URL http://iisserver:80/page.aspx
實體路徑 C:\inetpub\wwwroot\page.aspx
Logon 方法 Anonymous
登入使用者匿名

原因

之所以發生此錯誤,是因為設定為處理要求的 HTTP 處理程式已設定特定前置條件,但其應用程式集區不符合部分或全部的先決條件。 這會導致靜態檔案處理程式改為用來處理要求。 要求處理接著會失敗,且 傳回 404.17 狀態,因為要求適用於動態資源,而不是靜態資源。

例如,請考慮下列處理程序對應:

<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />

在此情況下,如果從月臺要求的 *.aspx資源是在未在Classic模式中執行的應用程式集區中處理,則傳回 404.17 錯誤,或是未執行 .NET Framework 的 2.0 版本。 為了讓資源在此範例中正確提供,必須符合這三個前置條件。 具體而言,裝載此資源的應用程式集區必須針對 Classic Mode進行設定,它必須設定為使用 .NET Framework 的2.0版本,而且必須針對32位應用程式進行設定。

解決方法

若要解決此問題,請設定裝載應用程式的應用程式集區,以符合處理程式設定的所有預先條件。

  1. 開啟 IIS 管理員

  2. 展開計算機名稱,然後按兩下左窗格中的 [ 應用程式集區 ]。

  3. 反白顯示裝載中間窗格中資源的應用程式集區。

  4. 在最右窗格中,按兩下 [ 進階設定...

  5. 在類別下的 [ 進階設定 ] 對話框中,設定下列設定以符合處理程式需求:

    • .NET Framework 版本
    • 啟用32位應用程式
    • 受控管線模式

其他相關資訊

本節中的資訊旨在協助識別針對錯誤中所提及的網站和應用程式所設定的處理程式,以及協助識別針對該處理程式所設定的先決條件。

Appcmd.exe命令

下列命令可用來識別針對錯誤輸出中列出的網站所設定的處理程式。

列出應用程式集區

下列命令示範如何判斷應用程式正在執行的應用程式集區,然後列出為該應用程式集區設定的先決條件。

C:\Windows\System32\inetsrv>appcmd.exe list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

C:\Windows\System32\inetsrv>appcmd.exe list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

清單處理程式

此命令會輸出預設網站中針對特定應用程式所設定的處理程式。

C:\Windows\System32\inetsrv>appcmd.exe list config "Default Web Site/application" -section:handlers
<system.webServer>
  <handlers accessPolicy="Read, Script">
    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
  </handlers>
</system.webServer>

在 ASP.NET 的情況下,可能會為 *.aspx 資源設定許多處理程式。 在某些情況下,處理程式可能只需要變更,才能比對應用程式執行的應用程式集區。 以下是不同 ASP.NET 2.0 處理程式及其各種先決條件設定的清單。

  • ASP.NET 2.0 整合模式 32/64 位處理程式

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET 2.0 傳統模式 32 位處理程式

    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" 
        scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" 
        responseBufferLimit="0" />
    
  • ASP.NET 2.0 傳統模式 64 位處理程式

    <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" 
         preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
    

重現的步驟

  1. 建立包含兩個檔案的目錄。

    • 使用內容Test.aspx<%Response.Write("Hello World")%>

    • 包含內容的 Web.config

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
          <system.webServer>
              <httpRedirect enabled="false" destination="http://TestSite" exactDestination="false" childOnly="false" httpResponseStatus="Permanent" />
              <security>
              </security>
              <handlers>
                  <clear/>
                  <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                  <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
              </handlers>
          </system.webServer>
          <system.web>
              <authentication mode="Windows">
                  <forms cookieless="UseCookies" />
              </authentication>
          </system.web>
      </configuration>
      
  2. 建立 IIS 7.0 或更新版本應用程式,以指向具有這兩個檔案的目錄。

  3. 設定新的應用程式,以在針對整合模式設定的應用程式集區中執行。

  4. 流覽至 test.aspx