Сведение этого к самому простому из возможных правил:
<rule name="Reverse Proxy" stopProcessing="true">
<match url="^external/(.*)" />
<action type="Rewrite" url="http://some-site/{R:1}" />
</rule>
(«Включить прокси» отмечен в настройках прокси-сервера ARR на уровне сервера).
Приведенное выше правило перезаписиотлично работает в очень простом тестовом приложении с web.config, содержащим раздел, он отлично работает в приложении веб-форм, но если я добавлю то же правило в приложение MVC3 (на той же машине, так что идентичный конфиг для IIS выше) это никогда не имеет никакого эффекта;запрос проходит через.
, если это просто перезапись (а не обратный прокси), он работает нормально, например,
<rule name="rewrite to internal" stopProcessing="true">
<match url="^internal/(.*)" />
<action type="Rewrite" url="different-internal/{R:1}" />
</rule>
... нормально.
Я могу заставить правило обратного прокси работать, если я добавлю
routes.IgnoreRoute("external/{*pathInfo}");
в класс Global.asax.cs, чтобы мой запрос на внешний / * не попал в контроллер по умолчанию, но я нене понимаю почему.Я думаю, что модуль перезаписи URL начинает работать до маршрутизации (см. http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/), поэтому я ожидаю, что между ними не будет конфликта.
Добавляет ли модуль маршрутизации «виртуальную» перезаписьправила для модуля перезаписи URL, которые переопределяют мои объявленные правила перезаписи?