IIS Webサーバーのエラーページが文字化けする - IIS

IIS Webサーバーのエラーページが文字化けする現象について紹介します。

現象

IISのWebサイトで存在しないページにアクセスすると、下図のエラーページが表示されることがあります。
通常のIISのエラーページとデザインも違いますし、ページ内容が文字化けしています。


文字コードを指定して開くとメッセージの内容を確認できます。ページが無い旨のエラーメッセージです

対処法:「詳細なエラー」に変更する

インターネット インフォメーション サービス(IIS) マネージャー を開きます。左側のツリービューで対象のサイトのノードをクリックして選択します。 右側のエリアに設定項目が表示されます。[IIS]のセクションの[エラーページ]の項目をダブルクリックします。


エラーページの設定画面が表示されます。右側の[操作]エリアの[機能設定の編集...]のリンクをクリックします。


[エラー ページ設定の編集]ダイアログが表示されます。
[エラー応答]のセクションの設定が[ローカル要求に対するエラーの詳細とりモード要求に対するカスタム エラーページ]のラジオボタンにチェックが付いています。


ラジオボタンのチェックを[詳細なエラー]に変更します。変更ができたら[OK]ボタンをクリックします。


再度Webブラウザで存在しないページにアクセスします。下図のページが表示されます。エラー画面が表示されます。


上記の設定変更でエラーメッセージは確認できるようになりましたが、外部のアクセスで詳細なエラーメッセージを表示する動作になっている点は注意が必要です。

原因調査

カスタムエラーページの変更

先の設定方法で文字化けしないエラーページが表示できました。
一方で[エラー応答]の項目を[カスタム エラーページ]に変更した場合、Webブラウザで表示するとやはり文字化けしたエラー画面が表示されます。



エラーページを変更して文字化けが表示されない状態にできるか確認します。
エラーページの設定画面で、404の項目をクリックして選択します。右側の[操作]エリアの[編集]のリンクをクリックします。


[カスタム エラー ページの編集]ダイアログが表示されます。[応答動作]のセクションの設定がデフォルトでは[静的ファイルのコンテンツをエラー応答に挿入]になっています。


[このサイトで URL を実行]のラジオボタンをクリックしてチェックを変更します。ラジオボタン押したの[URL]のテキストボックスに /404.txt を入力します。 入力、設定ができたら[OK]ボタンをクリックしてダイアログを閉じます。


サイトのドキュメントルートのディレクトリに 404.txt ファイルを作成して配置します。中に "404" とテキストを入力します。


Webブラウザでアクセスすると、404の文字が表示されます。指定したURLがエラーページとして使われる動作が確認できます。


なお、デフォルトで指定されている %SystemDrive%\inetpub\custerr\<LANGUAGE-TAG>\404.html のファイルをWebブラウザで確認すると下図の表示となります。 IISでのエラーページの内容と違った表示になっています。

カスタム エラー ページの設定で[クライアントの言語でエラー ファイルを返す]を無効にした場合

[カスタム エラー ページの編集]ダイアログで[クライアントの言語でエラー ファイルを返す]を無効にした場合の動作を確認します。


[クライアントの言語でエラー ファイルを返す]のチェックボックスをクリックしチェックを外します。


[ファイル パス]のテキストボックスにエラーファイルのパスを直接入力します。入力ができたら[OK]ボタンをクリックします。


エラーページの画面に戻ると、設定を変更したエラーの項目のパスの値が変わっていること、[エントリの種類]が"ローカル"になっていることが確認できます。


設定変更後に再度Webブラウザで存在しないページにアクセスします。下図の画面が表示されます。


エンコードを指定した場合の表示結果です。「内部サーバーエラー」の表示になっており、ファイルが見つからなかった旨のエラーではないです。


上記の結果から、エラーページの出力で不具合があることがわかります。

IIS設定の再確認

IISの設定を再確認します。

ドキュメントルートのWeb.Configファイルの確認

はじめに、ドキュメントルートのWeb.Configファイルを削除または、初期状態に戻して不具合が解消されるか確認します。

サーバーの設定ファイルの確認

エラーが解消しない場合は、サーバーのIISの設定ファイルを確認します。サーバーのIISの設定ファイルは次のフォルダに配置されています。
C:\Windows\System32\inetsrv\Config
フォルダ内の applicationHost.config ファイルを開きます。


ファイル内の httpErrors タグの記述を確認します。不具合の出ているサーバーでは、以下の記述でした。
何らかのきっかけで、404エラーのファイルパスが、404html となってしまっています。(正しくは 404.htm )
        <httpErrors allowAbsolutePathsWhenDelegated="true" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
            <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" />
            <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" />
            <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" />
            <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="406.htm" />
            <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="412.htm" />
            <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="500.htm" />
            <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="501.htm" />
            <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="502.htm" />
            <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.html" responseMode="file" />
        </httpErrors>

httpErrors タグの内容を下記に変更します。
        <httpErrors allowAbsolutePathsWhenDelegated="true" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
            <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" />
            <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" />
            <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" />
            <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="406.htm" />
            <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="412.htm" />
            <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="500.htm" />
            <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="501.htm" />
            <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="502.htm" />
            <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.htm" />
        </httpErrors>



再度Webブラウザで存在しないページにアクセスします。下図のページが表示されます。IISのエラー画面が表示されることが確認できました。

まとめ

カスタムエラーページが正しく表示されない場合は、Web.Config ファイル、サーバーの設定ファイルである applicationHost.config の記述を再確認します。
このページのキーワード
  • IIS エラーページ 文字化け
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2021-10-30
作成日: 2021-08-20
iPentec all rights reserverd.