IIS中特定资源的自定义http状态代码

时间:2011-11-09 12:18:27

标签: http iis iis-7

我的网站上有一个'app_offline.htm'文件。我如何配置IIS以使用特定的状态代码(例如,209)而不是默认的一个(200)来返回它?

3 个答案:

答案 0 :(得分:4)

使用ASP.Net的'app_offline.htm'功能的另一种方法是使用IIS URL Rewrite Module,它有一个huge bag of tricks,设置自定义响应代码就是其中之一。

如果页面内容不重要,只有响应代码,那么使用该模块,您可以配置一个规则,该规则将返回一个空白响应,其中包含209代码到任何请求,只要规则已启用。

这将在你的web.config中实现,如下所示:

<configuration>
    <system.webServer>       
        <rewrite>
            <rules>
                <rule name="app_offline" stopProcessing="true">
                    <match url=".*" />
                    <action type="CustomResponse" statusCode="209" statusReason="System unavailable" statusDescription="The site is currently down for maintenance, or something." />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

答案 1 :(得分:3)

由于IIS对网站根目录中名为“app_offline.htm”的文件进行了特殊处理,因此除非您重命名该文件,否则此建议可能无效。但是,无论如何它在这里......

您可以使用HttpHandler。在您的web.config中,添加如下内容:

<add name="app_offline_GET" path="app_offline.htm" verb="GET" type="namespace.classname,dllname" />

显然,请在'type'属性中替换正确的信息。

在HttpHandler中,执行以下操作:

public void ProcessRequest(HttpContext context) {
  context.Response.WriteFile("app_offline.htm");
  context.Response.StatusCode = 209;        
  context.Response.StatusDescription = "whatever";
}

答案 2 :(得分:1)

要根据状态代码显示特定内容,您可以让响应设置状态代码,并根据httpErrors部分中的代码映射要显示的内容。请参阅此帖https://serverfault.com/questions/483145/how-to-add-a-site-wide-downtime-error-message-in-iis-with-a-custom-503-error-co

中的示例

为了保存的利益,我将复制以下示例:

<system.webServer>
    ...
    <rewrite>
        <rules>
            <rule name="SiteDown" stopProcessing="true">
                <match url=".*" />
                <action type="CustomResponse" statusCode="503" statusReason="Down for maintenance" statusDescription="will be back up soon" />
            </rule>
        </rules>
    </rewrite>

      <httpErrors existingResponse="Auto" errorMode="Custom" defaultResponseMode="File">
             <remove statusCode="503" subStatusCode="-1" />
             <error statusCode="503" path="503.html" />
      </httpErrors>
</system.webServer>