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 の既定のインストールに含まれています。
操作方法
カスタム エラー ページを追加する方法
インターネット インフォメーション サービス (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) マネージャー] をダブルクリックします。
[接続] ウィンドウで、サーバー名を展開して [サイト] を展開し、カスタム エラー ページを構成する Web サイトまたはアプリケーションに移動します。
[操作] ウィンドウで、[追加] をクリックします。
[カスタム エラー ページの追加] ダイアログ ボックスの [状態コード] で、カスタム エラー メッセージを作成する HTTP 状態コードの番号を入力します。
[応答アクション] セクションで、次のいずれかを行います。
- カスタム エラーに静的な内容 (.html ファイルなど) を提供するには、[静的ファイルの内容をエラー応答に挿入する] を選びます。
- カスタム エラーに動的な内容 (.asp ファイルなど) を提供するには、[このサイトで URL を実行する] を選びます。
- カスタム エラー ファイルを含む別の URL にクライアント ブラウザーをリダイレクトするには、[302 リダイレクトで応答する] を選びます。
[静的ファイルの内容をエラー応答に挿入する] を選んだ場合は [ファイル パス] テキスト ボックスにカスタム エラー ページのパスを入力し、[このサイトで 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 です。
|
||||||||
detailedMoreInformationLink |
省略可能な文字列属性。 ページの下部に表示される、特定のエラーに関する詳細情報を含むページへのリンクを指定します。 このプロパティを使用すると、エンド ユーザーにエラー情報があるカスタマイズした場所を指定できます。 状態、サブ状態、HRESULT、メッセージ ID が、クエリ文字列の一部として送信されます。 既定値は https://go.microsoft.com/fwlink/?LinkID=62293 です。 |
||||||||
errorMode |
省略可能な列挙型属性。 HTTP エラーが有効かどうかを指定します。 errorMode 属性には、次の値のいずれかを使用できます。既定値は DetailedLocalOnly です。
|
||||||||
existingResponse |
省略可能な列挙型属性。 HTTP 状態コードがエラー (つまり、応答コード >= 400) のときに、既存の応答をどうするかを指定します。 existingResponse 属性には、次の値のいずれかを使用できます。既定値は Auto です。
|
子要素
要素 | 説明 |
---|---|
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 ファイルの適切な場所セクションに構成設定がコミットされます。
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()