有没有办法用友好的消息关闭*整个* IIS站点和所有应用程序?

时间:2014-05-21 18:40:27

标签: asp.net iis iis-7 app-offline.htm

目前,我们拥有多个具有多个虚拟应用程序的网站。像这样:

Site1
    /app1
    /app2
    /app3

Site2
    /app1
    /app2
    /app3

在这种情况下,两个站点的“app1”,“app2”和“app3”指向同一物理文件夹。我们使用的是IIS 7.0和.NET 4.0。

目标是在显示友好消息时关闭Site1以及对其任何虚拟应用程序的任何访问,但不会在此过程中关闭Site2。如果我们在根目录下放置app_offline.htm文件,那么当用户导航到根目录时,它会很有用。但是,如果用户直接导航到其中一个虚拟应用程序,则会忽略根目录中的app_offline.htm。将app_offline.htm放入每个虚拟目录不是一个选项,因为它会关闭该应用程序的Site1和Site2。

显然,我们可以停止应用程序池,但这显示了丑陋的503 Service Unavailable消息,我不想更改503错误页面本身。

1 个答案:

答案 0 :(得分:2)

我会将Site1的物理路径更改为指向其他地方,例如/ siteoffline,其中包含default.htm文件,其中包含您的友好消息。然后我会添加一个匹配所有请求的URL重定向规则:(。*)并重定向到/default.htm。规则如下:

    <rewrite>
        <rules>
            <clear />
            <rule name="DontRedirectDefault" stopProcessing="true">
                <match url="default.htm" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="None" />
            </rule>
            <rule name="RedirectAllToRoot" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAny" trackAllCaptures="false" />
                <action type="Redirect" url="/default.htm" />
            </rule>
        </rules>
    </rewrite>

如果我们已经在查看default.htm,那么第一条规则就是跳过重定向。其他任何内容都将降至第二条规则,并将所有内容重定向到/default.htm。