web-dev-qa-db-ja.com

カスタム404エラーページが機能しないIIS 8.5

最近ホストを移動し、IISでカスタマーエラーを再度設定する必要がありました。

次のようにIIS管理ページとエラーページに移動できます:

Custom Errors on IIS

次に、カスタムエラーに移動し、次のようにオプションを設定します。

Customer Errors setup

これにより、web.configファイルが次のように作成されます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

ページをテストすると、505エラーは正常に機能し、正しいページにリダイレクトされますが、404はリダイレクトされず、標準のIIS 404エラーを返します。404エラーを確認しました。ページはサーバーの正しい場所に配置されています。

他に何をする必要があるのか​​わかりません。

8
4532066

最終的には機能するようになりました(これを見つけることで助けられました: http://forums.iis.net/t/1173965.aspx )、使用:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>
13
4532066

/ Error/Missingにカスタム404ページがある場合にも同様の問題が発生していましたが、存在しなかった静的ファイルやDIDが存在するフォルダー/ディレクトリには表示されませんでした) (ただし、MVCによって提供されるべきではありません)Missingページのコントローラーには次のものがあります。

    Response.AddHeader("Content-Type","text/html; charset=utf-8");
    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = (int)HttpStatusCode.NotFound; // 404

また、コントローラーで以下を返した場合、カスタムエラーページが表示されませんでした。

return HttpNotFound();

PassThroughを設定すると、IISのデフォルトエラーを空白のページに変更できます:

<httpErrors existingResponse="PassThrough" />

これを「置換」に変更すると、デフォルトのIISエラーが再び表示されます。

Web.configにもセクションがありましたが、IIS 8.5なので、もう必要ないようです。

<system.web>
    <customErrors mode="Off">
</system.web>

したがって、基本的に、デフォルトのIISメッセージ(ワンライナーまたはより詳細なメッセージ)を取り除くことができませんでした。私のhttpErrorsセクションは次のようになりました。

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" />
</httpErrors>

最後に、この質問に出くわし、この質問の他の回答を調べていたところ、各エラー行でResponseModeを試すことができることに気付きました。 defaultResponseModeを設定しているので、これは必要ないと思いましたが、違いがあります。

したがって、カスタム404ページを提供する場合は、次のhttpErrorsモジュールを使用します。

<httpErrors errorMode="Custom">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" responseMode="ExecuteURL" />
</httpErrors>

私はこれらすべての詳細をここに置いたので、これが私がしたのと同じことを検索している他の誰かに表示されることを願っています-それが役立つことを願っています!

6
Matt Kemp