Есть ли способ настроить IIS 7.5 для выполнения перезаписи URL-адресов в разные пулы приложений на одном и том же сайте без возникновения ошибки 403.18?
Мы используем Helicon ISAPI Rewrite 3 на IIS 6, и он отлично работает. «Приложение» корневого уровня выполняется в собственном пуле приложений, и в IIS 6 у нас нет проблем с перезаписью URL-адресов из этого пула приложений в любой из четырех других пулов приложений. Но когда я копирую ту же информацию о конфигурации сервера в IIS 7.5, URL-адрес перезаписывается в любой из других пулов приложений с ошибкой «403.18 - запрещено».
Странно то, что IIS 6 (по крайней мере, насколько я могу судить, глядя на диалоговое окно конфигурации службы сайта) не работает в режиме эмуляции IIS 5, поэтому каким-то образом перезаписи не вызывают ошибок 403.18. Так что-то должно быть иначе ... но что бы это ни было, я точно не смог понять этого.
Кстати, мы не женаты на Helicon ISAPI Rewrite. Если есть другой способ сохранить наши текущие правила конфигурации перезаписи с использованием другого модуля или метода, я был бы более чем счастлив использовать его.
В IIS вы не можете просто перенаправить запрос от одного приложения к другому. Приложения изолированы, поэтому вы получаете ошибку 403.
Вы можете проксировать запросы, используя ISAPI_Rewrite, Ape или ARR - это не имеет значения, потому что запрос в любом случае будет передан другому приложению с использованием локального HTTP-запроса. Это решение довольно стабильно, но вы потеряете некоторую производительность.
Перенаправление, вероятно, здесь не вариант, потому что он все равно сгенерирует два запроса к серверу, но поскольку запрос будет сгенерирован пользователем, производительность медленного соединения может значительно снизиться.
На самом деле это невозможно с URL Rewrite, однако, если вы действительно хотите это сделать, вы можете использовать ARR (Application Request Routing) вместе, и это будет работать, однако обратите внимание, что он действительно будет выполнять полный новый запрос для него, другими словами, он будет работать как прокси-сервер, выдающий себе новый HTTP-запрос, для чего вам нужно переписать, чтобы использовать полный URL-адрес, включая имя хоста и все остальное. Это большие накладные расходы, поэтому только если они критичны для приложения.
Конечно, как уже упоминал Скотт Форсайт, другой вариант - использовать перенаправление.
Он также не поддерживается в IIS7 для нового компонента Microsoft URL Rewrite. Возникает та же проблема.
Я не помнил, что в IIS6 можно было переписывать пулы приложений. Вы делаете переписывание, а не редирект? Перенаправление будет работать в IIS7.
Я бы спросил Helicon на сайте www.isapirewrite.com. Они хорошо отзываются на своих форумах. Возможно, модули ISAPI теперь полностью находятся в процессе w3wp.exe и поэтому не могут передать свой запрос другому пулу приложений.
Другое место, где можно задать вопрос, будет по адресу http://forums.iis.net/. Команда разработчиков IIS отвечает на некоторые сообщения и может предоставить подробную информацию о том, почему даже функциональность ISAPI Rewrite изменилась при переходе на IIS7.
Мы также использовали ISAPI Rewrite 3 на IIS6, но когда мы перешли на IIS7.5, мы перешли на Helicon APE, и он работал даже лучше, чем Rewrite. Вы можете использовать данные в своей базе данных, чтобы переписать URL-адреса.
Я обнаружил, что это та самая скрытая вещь, которая приближается к mod_rewrite для IIS.