3 回答
TA贡献1780条经验 获得超3个赞
* 2016年4月更新
当.net代码抛出异常(404,403,500等)时使用customErrors属性,并且当IIS本身抛出异常时使用httpErrors属性。
/ myfakeextensionslessurl - > httpErrors 404
/myfakeaspsx.aspx - > customErrors 404
/myfakeimage.jpg - > httpErrors 404
/throw500.apx - > customErrors 500
/ throw500 - > customErrors 500
试图正确配置这一点有很多陷阱。因此,如果您正在寻找一个快速示例,您拥有的最佳选择是:
示例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 !。(没有黑客)
一种解决方法是禁用自定义错误,让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-custom-error-pages
添加回答
举报