Есть ли способ закрыть * весь * сайт IIS и все приложения дружеским сообщением?
В настоящее время у нас есть несколько сайтов с несколькими виртуальными приложениями. Вот так:
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 ответ
Я бы изменил физический путь для 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.