web.config中customErrors与httpErrors的区别

以Windows 2008 R2 IIS 7.5为例,网站管理介面有两处可以自订错误页面,上方的ASP.NET区的.NET Error Pages与下方IIS区的Error Pages:

两个设定介面有点不同,试着各自加上HTTP 404设定,但导向不同网页,.NET Error Pages设定指向/NotFound/SystemWeb404.html:

Error Pages指向/NotFound/SystemWebServer404.html

设定结果会反应在web.config,.NET Error Pages设定被写入system.web/customErrors,Error Pages则是写到system.webServer/httpErrors

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <customErrors mode="On">
    <error statusCode="404" redirect="/NotFound/SystemWeb404.html"/>
        </customErrors>
    </system.web>
    <system.webServer>
        <urlCompression doDynamicCompression="true" />
        <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" 
              path="/NotFound/SystemWebServer404.html" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

这两个设定有什么不同呢?简单来说,存取静态内容(如.js、.html、.css、.jpg…)发生错误会依照httpErrors设定办事;由.NET处理程序接手的URL(例如:.aspx、.ashx、.svc、MVC注册路由),出错时则看customErrors里的设定。

以下是简单示范,输入不存在的blah.gif看到的是SystemWebServer404.html、输入不存在的blah.aspx则是SystemWeb.404.html,故得证。

补充一点:httpErrors有个errorMode属性,预设为DetailedLocalOnly,相当于customErrors mode="RemoteOnly",故在本机测试看不到自订错误页,要改成Custom才看得到。這是IIS 7起加入的行为,还停在IIS 6的脑袋沒意识到有差异,花了点时间才搞定。

posted @ 2017-08-23 09:48  shashatongzhi  阅读(475)  评论(0编辑  收藏  举报