ASP.NET MVC アプリケーションの web.config ファイルの セクションcustomErrors
とセクションの違いは何ですか?httpErrors
各セクションの使用に関するガイドラインは何ですか?
ベストアンサー1
*2016年4月更新
customErrors 属性は、.net コードが例外 (404、403、500 など) をスローしているときに使用され、httpErrors 属性は IIS 自体が例外をスローしているときに使用されます。
- /myfakeextensionslessurl --> httpErrors 404
- /myfakeaspsx.aspx --> カスタムエラー 404
- /myfakeimage.jpg --> httpエラー 404
- /throw500.apx --> カスタムエラー 500
- /throw500 --> カスタムエラー 500
これを正しく設定しようとすると、多くの落とし穴があります。簡単な例を探している場合、最適な 2 つのオプションは次のとおりです。
例1: HTMLページの使用
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>
例 2: aspx ページの使用
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>
aspx エラー ページでは、次のような操作を行う必要があります (例: 404 ページ)。
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
注: customErrorsセクションで拡張子のないURLを使用すると、ありえない!。(ハッキングなし)
回避策の 1 つは、カスタム エラーを無効にして、http エラーでカスタム ページを処理できるようにすることです。友人がそのような設定を作成しました。時間ができたら、コードを共有します。
背景
優れたカスタム エラー ページは次のようになります。
- 問題のあるページをローカルでアクセスしたときに実際の例外を表示する
- 問題のあるページにリモートでアクセスしたときにカスタムページを表示する
- リダイレクトは行わず、エラー ページのコンテンツのみを表示します (SEO 上の理由により)
- 正しいステータスコードが表示されます
したがって、設定内のいくつかのオプションを明確にします。
<customErrors mode="RemoteOnly"
. ここで指定できるのはOn
、、、Off
ですRemoteOnly
。On
= カスタムエラーページを常に表示するOff
= 常に実際のエラーを表示するRemoteOnly
= エラーをローカルに表示しますが、カスタムエラーページをリモートで表示します。したがって、RemoteOnly
ステートメント1では
<customErrors redirectMode="ResponseRewrite"
ResponseRedirect
。ここでは、または を指定できますResponseRewrite
。このResponseRedirect
モードでは、エラー ページがカスタム エラー ページにリダイレクトされます。リンク クローラー (SEO) の場合、この結果が 302 -> 500 になりますが、リンク クローラーには 500 エラーを取得させたいのです。<httpErrors errorMode="DetailedLocalOnly"
. これはモードに相当しますcustomErrors
。使用可能なオプション:Custom
、、。Detailed
DetailedLocalOnly
私にとって非常に役立った良いブログ投稿は次のとおりです:http://benfoster.io/blog/aspnet-mvc-カスタムエラーページ