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 7.0 | IIS 6.0 | |
|---|---|---|
| 注意 |
<httpErrors> は IIS 7.0 で新たに導入された要素です。 |
<httpErrors> 要素は、IIS 6.0 の IIsWebService メタベース オブジェクトの HttpErrors プロパティに代わるものです。 |
セットアップ
<httpErrors> 要素は、IIS 7.0 の既定のインストールに含まれています。
方法
カスタム エラー ページを追加する方法
- タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
- [接続] ウィンドウで当該サーバー名を展開して [サイト] を展開し、カスタム エラー ページを構成する Web サイトまたは Web アプリケーションを選択します。
- [ホーム] ウィンドウで [エラー ページ] をダブルクリックします。
- [操作] ウィンドウで [追加] をクリックします。
- [カスタム エラー ページの追加] ダイアログ ボックスの [状態コード] の下に、カスタム エラー メッセージを作成する HTTP 状態コードの番号を入力します。
-
[応答動作] セクションで、次のいずれかを行います。
- カスタム エラーに .html ファイルなどの静的コンテンツを提供する場合は、[静的ファイルのコンテンツをエラー応答に挿入] を選択します。
- カスタム エラーに .asp ファイルなどの動的コンテンツを提供する場合は、[このサイトで URL を実行] を選択します。
- カスタム エラー ファイルを持つ別の URL にクライアント ブラウザーをリダイレクトする場合は、[302 リダイレクトによる応答] を選択します。
-
[ファイル パス] テキスト ボックスで、[静的ファイルのコンテンツをエラー応答に挿入] を選択した場合はカスタム エラー ページのパスを入力し、[このサイトで 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 説明:
値: ExecuteURL 説明:
値: Redirect 説明:
|
detailedMoreInformationLink
| オプションの string 属性。 特定のエラーについての詳細情報を持つページへのリンク (ページの下部に表示) を指定します。このプロパティを使用すると、カスタマイズしたエラー情報の場所をエンド ユーザーに示すことができます。状態、副状態、HRESULT、およびメッセージ ID がクエリ文字列の一部として送信されます。 既定値については、
http://go.microsoft.com/fwlink/?LinkID=62293
を参照してください。 |
errorMode
| オプションの enum 属性。 HTTP エラーを有効にするかどうかを指定します。 errorMode 属性には、次のいずれかの値を指定できます。既定値は
DetailedLocalOnly
です。
-------------------------------------------------------------------------------------------------- 値: DetailedLocalOnly 説明:
値: Custom 説明:
値: Detailed 説明:
|
existingResponse
| オプションの enum 属性。 HTTP 状態コードがエラー、つまり応答コードが 400 以上の場合に、既存の応答をどうするかを指定します。 --------------------------------------------------------------------------------------------------------- 値: Auto 説明:
値: Replace 説明:
値: PassThrough 説明:
|
子要素
| 要素 | 説明 |
|---|---|
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()


