0

目前我们有多个站点和多个虚拟应用程序。像这样:

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 错误页面本身。

4

1 回答 1

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。

于 2014-05-22T02:46:08.773 回答