HTTP エラー <httpErrors>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<httpErrors> 要素を使用すると、Web サイトまたはアプリケーションにカスタム エラー メッセージを構成することができます。カスタム エラー メッセージを使用すると、サイトの利用者が要求したコンテンツにアクセスできない場合に、ファイルの提供、別のリソースの返送、または URL へのリダイレクトによって、わかりやすい応答や説明的な応答を提供できます。たとえば、Web サイトの各エラー メッセージ ページをカスタマイズして、そのサイトのその他のページと同じ外観にすることができます。

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

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

さらに、<httpErrors> 要素には、エラーの原因となる要求を処理するように IIS 7.0 を構成する属性が含まれます。existingResponse 属性では、サーバーが HTTP エラー状態コードを返す場合に IIS 7.0 で既存の応答に対して何を行うかについて定義します。defaultPath 属性では、<error> 要素内の responseMode 属性に File を指定することを選択した場合、カスタマー エラー ページへのパスを定義します。

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

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

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

互換性

  IIS 7.0 IIS 6.0
注意 <httpErrors> は IIS 7.0 で新たに導入された要素です。 <httpErrors> 要素は、IIS 6.0 の IIsWebService メタベース オブジェクトの HttpErrors プロパティに代わるものです。

セットアップ

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

方法

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

  1. タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。

  2. [接続] ウィンドウで当該サーバー名を展開して [サイト] を展開し、カスタム エラー ページを構成する Web サイトまたは Web アプリケーションを選択します。

  3. [ホーム] ウィンドウで [エラー ページ] をダブルクリックします。

    拡大

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

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

    拡大

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

    • カスタム エラーに .html ファイルなどの静的コンテンツを提供する場合は、[静的ファイルのコンテンツをエラー応答に挿入] を選択します。
    • カスタム エラーに .asp ファイルなどの動的コンテンツを提供する場合は、[このサイトで URL を実行] を選択します。
    • カスタム エラー ファイルを持つ別の URL にクライアント ブラウザーをリダイレクトする場合は、[302 リダイレクトによる応答] を選択します。
  7. [ファイル パス] テキスト ボックスで、[静的ファイルのコンテンツをエラー応答に挿入] を選択した場合はカスタム エラー ページのパスを入力し、[このサイトで URL を実行] または [302 リダイレクトによる応答] を使用する場合はカスタム エラー ページの URL を入力し、[OK] をクリックします。

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

構成

サーバー レベルでの <httpErrors> 要素の構成は ApplicationHost.config ファイルで、サイトおよびアプリケーション レベルでの構成は該当する Web.config ファイルで、それぞれ設定できます。

属性

属性 説明
defaultPath オプションの string 属性。

カスタム エラー ページの既定のパスを指定します。パスの種類は、defaultResponseMode 属性によって決定されます。File を選択した場合、ファイル パスが返されます。ExecuteURL または Redirect のいずれかのパスの種類を選択した場合は、カスタム エラー ページの URL が返されます。
defaultResponseMode オプションの enum 属性。

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

defaultResponseMode 属性には、次のいずれかの値を指定できます。既定値は File です。

--------------------------------------------------------------------------------------------------

値: File

説明:

  • カスタム エラーに .html ファイルなどの静的コンテンツを提供します。responseModeFile に設定されている場合、path の値にはファイル パスを指定する必要があります。
  • 数値は 0 です。

値: ExecuteURL

説明:

  • カスタム エラーに .asp ファイルなどの動的コンテンツを提供します。responseModeExecuteURL に設定されている場合、path の値にはサーバーの相対 URL を指定する必要があります。
  • 数値は 1 です。

値: Redirect

説明:

  • カスタム エラー ファイルを持つ別の URL にクライアント ブラウザーをリダイレクトします。responseModeRedirect に設定されている場合、path の値には絶対 URL を指定する必要があります。
  • 数値は 2 です。
detailedMoreInformationLink オプションの string 属性。

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

既定値については、 https://go.microsoft.com/fwlink/?LinkID=62293 を参照してください。
errorMode オプションの enum 属性。

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

errorMode 属性には、次のいずれかの値を指定できます。既定値は DetailedLocalOnly です。

--------------------------------------------------------------------------------------------------

値: DetailedLocalOnly

説明:

  • 要求がローカル コンピューターからの場合は詳細エラー情報を返し、要求が外部コンピューターからの場合はカスタム エラー メッセージを返します。
  • 数値は 0 です。

値: Custom

説明:

  • モジュールまたはサーバーが生成するエラーを、指定するカスタム ページで置き換えます。このモードは、エンド ユーザーに扱いやすいエラー メッセージを提供するのに役立ちます。
  • 注 : この設定では、ローカルな要求に対してさえ、詳細エラーをオフにします。
  • 数値は 1 です。

値: Detailed

説明:

  • 詳細エラー情報をクライアントに返信します。このモードは、Web サイトとアプリケーションをテストおよびデバッグするのに役に立ちます。
  • 数値は 2 です。
existingResponse オプションの enum 属性。

HTTP 状態コードがエラー、つまり応答コードが 400 以上の場合に、既存の応答をどうするかを指定します。

---------------------------------------------------------------------------------------------------------

値: Auto

説明:

  • SetStatus フラグが設定されている場合のみ、応答をそのままにしておきます。
  • 数値は 0 です。

値: Replace

説明:

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

値: PassThrough

説明:

  • 既存の応答が存在する場合、応答をそのままにしておきます。
  • 数値は 2 です。

子要素

要素 説明
error オプションの要素。

HTTP エラーのコレクションに HTTP エラー を追加します。
remove オプションの要素。

HTTP エラー コレクションから 1 つの HTTP エラーに対する参照を削除します。
clear オプションの要素。

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

構成サンプル

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

<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 のすべてのエラーに対して新しいファイルが追加されます。これは、"URL シーケンスが拒否されました" として IIS で返されるエラーです。この例では、プレフィックス パスが "%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

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()