目前,我们拥有多个具有多个虚拟应用程序的网站。像这样:
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错误页面本身。
答案 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。