web.config中customErrors与httpErrors的区别

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

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

Error Pages指向/NotFound/SystemWebServer404.htmlweb

设定结果会反应在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,故得证。url

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

相关文章
相关标签/搜索