HTTP エラー: <httpErrors>

概要

<httpErrors> 要素を使うと、Web サイトまたはアプリケーションのカスタム エラー メッセージを構成できます。 カスタム エラー メッセージを使用すると、サイトの閲覧者が要求したコンテンツにアクセスできない場合、ファイルの提供、別のリソースの表示、または URL へのリダイレクトによって、わかりやすい、またはより多くの情報を含んだ応答を提供できます。 たとえば、Web サイトの各エラー メッセージ ページをカスタマイズして、サイトの残りの部分と同じ外観にできます。

<httpErrors> 要素には <error> 要素のコレクションが含まれており、それぞれで、IIS が特定の HTTP エラーに応答するために使うエラー メッセージが定義されています。 サイト、アプリケーション、または URL の Web.config ファイルの <httpErrors> 要素に <error> 要素を追加して、IIS にカスタム エラー メッセージを追加できます。 各 <error> 要素では、responseMode 属性を使って、エラーに応答して IIS が静的コンテンツまたは動的コンテンツを提供するか、それとも別の URL にリダイレクトするかを指定します。

<remove> 要素を使うと、サイトまたはアプリケーションが IIS 構成階層の上位レベルから継承したエラー メッセージのコレクションから、特定のエラー メッセージを削除できます。 また、<clear> 要素を使うと、サイトまたはアプリケーションが継承した HTTP エラー メッセージのコレクションから、すべての HTTP エラー メッセージを削除することもできます。

<httpErrors> 要素には、エラーの原因となる要求を処理するために IIS 7 を構成する属性も含まれています。 existingResponse 属性では、サーバーから HTTP エラー状態コードが返されたときに、IIS 7 が既存の応答に対して実行する処理を定義します。 defaultPath 属性では、<error> 要素の responseMode 属性で File を指定した場合に、顧客エラー ページへのパスを定義します。

detailedMoreInformationLink 属性では、特定のエラーに関する詳細情報へのリンクを指定します。

<httpErrors> 要素には、HTTP エラーが発生したときに IIS がブラウザーに返す詳細さのレベルを制御するために使用できる、errorMode 属性を含めることもできます。 errorMode 属性は、DetailedLocalOnly (既定の設定)、Custom、または Detailed に設定できます。 DetailedLocalOnly を指定した場合、または errorMode の値を指定しない場合、IIS は詳細なエラー情報をローカル サーバーのブラウザーにのみ返し、外部コンピューターのブラウザーにはカスタム エラー メッセージを返します。 errorMode の値を Custom に設定すると、IIS は要求元のすべてのブラウザーにカスタム エラー メッセージのみを返します。 errorMode の値を Detailed に設定すると、IIS は要求元のすべてのブラウザーに詳細なエラー情報を返します。 既定値の DetailedLocalOnly を使うと、外部のブラウザーに機密情報を公開せずに、ローカル サーバーで HTTP エラーのトラブルシューティングを行うことができます。

既定では、IIS は %SystemRoot%\Help\IisHelp\Common フォルダーに格納されているファイルで定義されているエラー メッセージを提供します。 ユーザー向けのカスタム エラー メッセージを作成し、サイトで特定の HTTP エラーが発生するたびにこのページを返すように IIS を構成できます。

互換性

バージョン メモ
IIS 10.0 <httpErrors> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <httpErrors> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 <httpErrors> 要素は、IIS 8.0 では変更されませんでした。
IIS 7.5 IIS 7.5 では、allowAbsolutePathsWhenDelegated 属性が <httpErrors> 要素に追加されました
IIS 7.0 <httpErrors> 要素は IIS 7.0 で導入されました。
IIS 6.0 <httpErrors> 要素は、IIS 6.0 の IIsWebService メタベース オブジェクトの HttpErrors プロパティを置き換えます。

段取り

<httpErrors> 要素は、IIS 7 の既定のインストールに含まれています。

操作方法

カスタム エラー ページを追加する方法

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー][ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーの [スタート] をクリックし、[管理ツール] をポイントして、[インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、サーバー名を展開して [サイト] を展開し、カスタム エラー ページを構成する Web サイトまたはアプリケーションに移動します。

  3. [ホーム] ウィンドウで、[エラー ページ] をダブルクリックします。
    Screenshot that shows the Error Pages double-clicked.

  4. [操作] ウィンドウで、[追加] をクリックします。

  5. [カスタム エラー ページの追加] ダイアログ ボックスの [状態コード] で、カスタム エラー メッセージを作成する HTTP 状態コードの番号を入力します。
    Screenshot that shows the Add Custom Error Page.

  6. [応答アクション] セクションで、次のいずれかを行います。

    • カスタム エラーに静的な内容 (.html ファイルなど) を提供するには、[静的ファイルの内容をエラー応答に挿入する] を選びます。
    • カスタム エラーに動的な内容 (.asp ファイルなど) を提供するには、[このサイトで URL を実行する] を選びます。
    • カスタム エラー ファイルを含む別の URL にクライアント ブラウザーをリダイレクトするには、[302 リダイレクトで応答する] を選びます。
  7. [静的ファイルの内容をエラー応答に挿入する] を選んだ場合は [ファイル パス] テキスト ボックスにカスタム エラー ページのパスを入力し、[このサイトで URL を実行する] または [302 リダイレクトで応答する] を使う場合はカスタム エラー ページの URL を入力して、[OK] クリックします。

    Note

    [このサイトで URL を実行する] を選ぶ場合、パスは相対パスである必要があります。 [302 リダイレクトで応答する] を選ぶ場合、URL は絶対 URL である必要があります。

構成

<httpErrors> 要素は、ApplicationHost.config ファイルを使ってサーバー レベルで、および適切な Web.config ファイルを使ってサイトとアプリケーションのレベルで構成できます。

属性

属性 説明
allowAbsolutePathsWhenDelegated 省略可能な Boolean 属性です。

true に設定すると、<httpErrors> セクションがデリゲートされるとき、カスタム エラー ページに対して絶対パスを使用できます。 false に設定すると、サイト ルートに対する相対パスのみを使用できます。

既定値は false です。
defaultPath 省略可能な文字列属性。

カスタム エラー ページの既定のパスを指定します。 パスの種類は、defaultResponseMode 属性によって決まります。 File を選んだ場合は、ファイル パスが返されます。 ExecuteURL または Redirect のパスの種類を選んだ場合は、カスタム エラー ページの URL が返されます。
defaultResponseMode 省略可能な列挙型属性。

カスタム エラー コンテンツを返す方法を指定します。

defaultResponseMode 属性には、次のいずれかの値を指定できます。既定値は File です。
Value 説明
File カスタム エラーの静的な内容 (.html ファイルなど) を提供します。 responseModeFile に設定されている場合、path の値はファイル パスである必要があります。

この数値は 0 です。
ExecuteURL カスタム エラーの動的な内容 (.asp ファイルなど) を提供します。 responseModeExecuteURL に設定されている場合、path の値はサーバーの相対 URL である必要があります。

この数値は 1 です。
Redirect カスタム エラー ファイルを含む別の URL にクライアント ブラウザーをリダイレクトします。 responseModeRedirect に設定されている場合、path の値は絶対 URL である必要があります。

この数値は 2 です。
detailedMoreInformationLink 省略可能な文字列属性。

ページの下部に表示される、特定のエラーに関する詳細情報を含むページへのリンクを指定します。 このプロパティを使用すると、エンド ユーザーにエラー情報があるカスタマイズした場所を指定できます。 状態、サブ状態、HRESULT、メッセージ ID が、クエリ文字列の一部として送信されます。

既定値は https://go.microsoft.com/fwlink/?LinkID=62293 です。
errorMode 省略可能な列挙型属性。

HTTP エラーが有効かどうかを指定します。

errorMode 属性には、次の値のいずれかを使用できます。既定値は DetailedLocalOnly です。
Value 説明
DetailedLocalOnly ローカル コンピューターからの要求の場合は詳細なエラー情報を返し、外部コンピューターからの要求の場合はカスタム エラー メッセージを返します。

この数値は 0 です。
Custom モジュールまたはサーバーで生成されたエラーを、指定したカスタム ページに置き換えます。 このモードは、エンド ユーザーによりわかりやすいエラー メッセージを提供するのに便利です。

: この設定では、ローカル要求の場合でも、詳細なエラーがオフになります。

この数値は 1 です。
Detailed 詳細なエラー情報をクライアントに返送します。 このモードは、Web サイトとアプリケーションのテストとデバッグに役立ちます。

この数値は 2 です。
existingResponse 省略可能な列挙型属性。

HTTP 状態コードがエラー (つまり、応答コード >= 400) のときに、既存の応答をどうするかを指定します。

existingResponse 属性には、次の値のいずれかを使用できます。既定値は Auto です。
Value 説明
Auto SetStatus フラグが設定されている場合にのみ、応答をそのままにします。

この数値は 0 です。
Replace SetStatus フラグが設定されている場合であっても、既存の応答を置き換えます。

この数値は 1 です。
PassThrough 既存の応答が存在する場合は、応答をそのままにします。

この数値は 2 です。

子要素

要素 説明
error 省略可能な要素です。

HTTP エラーのコレクションに、HTTP エラーを追加します。
remove 省略可能な要素です。

HTTP エラーのコレクションから、1 つの HTTP エラーへの参照を削除します。
clear 省略可能な要素です。

HTTP エラーのコレクションから、すべての HTTP エラーへの参照を削除します。

構成サンプル

次の構成例は、Web サイトまたはアプリケーションの Web.config ファイルに含まれていると、errorMode 属性を使って、詳細なエラー メッセージだけがローカル コンピューターに表示されるようにします。 また、defaultResponseMode 属性を使って、サイトまたはアプリケーションの応答モードを設定します。 その後、サンプルは 500 状態コードの継承されたエラー メッセージを削除します。 次に、prefixLanguageFilePath 属性を、IIS が新しいカスタム エラー ページを検索する必要があるディレクトリに設定し、path 属性を、カスタム エラー メッセージを含むファイル 500.htm に設定します。

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>

サンプル コード

次の例では、状態コードが 404 で、サブ状態が 5 (IIS は "URL シーケンス拒否" エラーを返します) であるすべてのエラーに対する新しいファイルを追加します。 これらの例では、プレフィックス パスは "%SystemDrive%\inetpub\custerr" に設定され、ファイル名は "404.5.htm" です。

AppCmd.exe

appcmd.exe set config -section:system.webServer/httpErrors /+"[statusCode='404',subStatusCode='5',prefixLanguageFilePath='%SystemDrive%\inetpub\custerr',path='404.5.htm']" /commit:apphost

Note

AppCmd.exe を使用してこれらの設定を構成する場合は、commit パラメーターを必ず apphost に設定する必要があります。 これにより、ApplicationHost.config ファイルの適切な location セクションに構成設定がコミットされます。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection httpErrorsSection = config.GetSection("system.webServer/httpErrors");
         ConfigurationElementCollection httpErrorsCollection = httpErrorsSection.GetCollection();

         ConfigurationElement errorElement = httpErrorsCollection.CreateElement("error");
         errorElement["statusCode"] = 404;
         errorElement["subStatusCode"] = 5;
         errorElement["prefixLanguageFilePath"] = @"%SystemDrive%\inetpub\custerr";
         errorElement["path"] = @"404.5.htm";
         httpErrorsCollection.Add(errorElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim httpErrorsSection As ConfigurationSection = config.GetSection("system.webServer/httpErrors")
      Dim httpErrorsCollection As ConfigurationElementCollection = httpErrorsSection.GetCollection

      Dim errorElement As ConfigurationElement = httpErrorsCollection.CreateElement("error")
      errorElement("statusCode") = 404
      errorElement("subStatusCode") = 5
      errorElement("prefixLanguageFilePath") = "%SystemDrive%\inetpub\custerr"
      errorElement("path") = "404.5.htm"
      httpErrorsCollection.Add(errorElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var httpErrorsSection = adminManager.GetAdminSection("system.webServer/httpErrors", "MACHINE/WEBROOT/APPHOST");
var httpErrorsCollection = httpErrorsSection.Collection;

var errorElement = httpErrorsCollection.CreateNewElement("error");
errorElement.Properties.Item("statusCode").Value = 404;
errorElement.Properties.Item("subStatusCode").Value = 5;
errorElement.Properties.Item("prefixLanguageFilePath").Value = "%SystemDrive%\\inetpub\\custerr";
errorElement.Properties.Item("path").Value = "404.5.htm";
httpErrorsCollection.AddElement(errorElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set httpErrorsSection = adminManager.GetAdminSection("system.webServer/httpErrors", "MACHINE/WEBROOT/APPHOST")
Set httpErrorsCollection = httpErrorsSection.Collection

Set errorElement = httpErrorsCollection.CreateNewElement("error")
errorElement.Properties.Item("statusCode").Value = 404
errorElement.Properties.Item("subStatusCode").Value = 5
errorElement.Properties.Item("prefixLanguageFilePath").Value = "%SystemDrive%\inetpub\custerr"
errorElement.Properties.Item("path").Value = "404.5.htm"
httpErrorsCollection.AddElement errorElement

adminManager.CommitChanges()