はじめに
IISを使っているプロジェクトで404エラーページを表示させるときにハマったことがあったので紹介します。
アプリケーション側でエラーページを実装したところローカルでは表示されるのに、
外部からアクセスすると**「404 ファイルまたはディレクトリが見つかりません。」**というページが表示されます。
実はこのエラーページへはIISの404カスタムエラーページで、
IISのApplicationHost.config/httpErrorsの設定が影響するようです。
httpErrorsとは
statusコード400以上のレスポンスの振る舞いを設定できるconfig項目です。
ApplicationHost.config/httpErrors配下の属性のうち、今回関連のあるerrorModeについて説明していきます。
errorMode属性
HTTP エラーを有効にするかどうかを指定する。デフォルトはDetailedLocalOnly。
errorMode | 説明 |
---|---|
DetailedLocalOnly | アクセスがローカルPCからの場合は詳細エラーを返し、外部PCからの場合はカスタムエラーを返す。 |
Custom | サーバーが生成する詳細エラーをカスタムエラーで置き換えて返す。 |
Detailed | サーバーが生成する詳細エラーを返す。 |
わかりづらいので補足すると
詳細エラーというのはアプリケーション側で実装したエラーページ、カスタムエラーというのはIISのカスタムエラーページを指しています。
-
DetailedLocalOnlyはローカルアクセスのときはアプリケーション側で実装したエラーページを表示して、外部アクセスの時はIISのカスタムエラーページを表示します。
-
Customはローカル・外部アクセス問わずIISのカスタムエラーページを表示します。
-
Detailedはローカル・外部アクセス問わずアプリケーション側で実装したエラーページを表示します。
つまり・・・
今回はerrorMode属性がデフォルトのままDetailedLocalOnlyだったことにより
IISのカスタムエラーページが表示されました。
なのでDetailedに設定することでIISのカスタムエラーページが表示されなくなりました。
検証環境
IIS: 10.0