IIS 7.0 以降のバージョンでホストされている Web サイトにアクセスした場合のエラー メッセージ: HTTP エラー 404.17 - 見つかりません
この記事は、インターネット インフォメーション サービス (IIS) 7.0 以降のバージョンでホストされている Web サイトにアクセスすると、 HTTP エラー 404.17 - Not Found の問題を解決するのに役立ちます。
元の製品バージョン:インターネット インフォメーション サービス
元の KB 番号: 2019689
現象
IIS 7.0 以降のバージョンでホストされている Web サイトがあります。 Web ブラウザーを使用して Web サイト内の動的コンテンツを参照すると、次のようなエラー メッセージが表示される場合があります。
エラーの概要
HTTP エラー 404.17 - 見つかりません
要求されたコンテンツはスクリプトのように見え、静的ファイル ハンドラーでは提供されません。
詳細なエラー情報:モジュール StaticFileModule
Notification ExecuteRequestHandler
Handler StaticFile
エラー コードの0x80070032要求された URL http://iisserver:80/page.aspx
物理パス C:\inetpub\wwwroot\page.aspx
Logon メソッド匿名
ログオン ユーザー匿名
原因
このエラーは、要求を処理するように構成された 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
実行されていないアプリケーション プールで処理されている場合、または 32 ビットではない場合、または 2.0 バージョンの.NET Frameworkを実行していない場合は、404.17 エラーが返されます。 この例でリソースを正しく提供するには、3 つの事前条件をすべて満たす必要があります。 具体的には、このリソースをホストするアプリケーション プールを Mode 用Classic
に構成する必要があり、2.0 バージョンの.NET Frameworkを使用するように構成する必要があり、32 ビット アプリケーション用に設定する必要があります。
解決方法
この問題を解決するには、ハンドラーに設定されているすべての前提条件を満たすように、アプリケーションをホストするアプリケーション プールを構成します。
IIS マネージャーを開く
コンピューター名を展開し、左側のウィンドウで [ アプリケーション プール ] をクリックします。
中央のウィンドウでリソースをホストしているアプリケーション プールを強調表示します。
右端のウィンドウで、[詳細設定]... をクリックします。
カテゴリ (全般) の [ 詳細設定 ] ダイアログで、ハンドラーの要件に一致するように次の設定を構成します。
- .NET Framework バージョン
- 32 ビット アプリケーションを有効にする
- マネージド パイプライン モード
詳細情報
このセクションの情報は、エラーで言及された Web サイトとアプリケーションに対して構成されているハンドラーを特定し、そのハンドラーに対して構成されている事前条件を特定するのに役立ちます。
Appcmd.exe コマンド
次のコマンドを使用すると、エラーの出力に一覧表示されている Web サイト用に構成されたハンドラーを識別できます。
アプリケーション プールを一覧表示する
次のコマンドは、アプリケーションが実行されているアプリケーション プールを特定し、そのアプリケーション プール用に構成された前提条件を一覧表示する方法を示しています。
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)
ハンドラーを一覧表示する
このコマンドは、既定の Web サイトで特定のアプリケーション用に構成されたハンドラーを出力します。
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" />
再現する手順
2 つのファイルを含むディレクトリを作成します。
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 以降のバージョンのアプリケーションを作成します。
統合モード用に構成されたアプリケーション プールで実行するように新しいアプリケーションを構成します。
test.aspx を参照します。
フィードバック
フィードバックの送信と表示