IIS 7.5, несколько пулов приложений и перезапись URL (403.18 - запрещено)
Есть ли способ настроить 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. Если есть другой способ сохранить наши текущие правила конфигурации переписывания с использованием другого модуля или метода, я был бы более чем счастлив использовать его.
5 ответов
В IIS вы не можете просто направить запрос от одного приложения к другому. Приложения изолированы, поэтому вы получаете ошибку 403.
Вы можете прокси-запросы, используя ISAPI_Rewrite, Ape или ARR - это не имеет значения, потому что в любом случае запрос будет передан другому приложению с использованием локального HTTP-запроса. Это решение довольно стабильно, но вы потеряете некоторую производительность.
Перенаправление, вероятно, здесь не вариант, поскольку в любом случае он генерирует два запроса к серверу, но поскольку запрос будет сгенерирован пользователем с низкой производительностью соединения, он может значительно снизиться.
На самом деле это невозможно с URL Rewrite, однако, если вы действительно хотите это сделать, вы можете использовать ARR (Application Request Routing) в сочетании, и это будет работать, однако обратите внимание, что это действительно будет выполнять новый запрос, другими словами, он будет работать как прокси-сервер, выдавая новый HTTP-запрос самому себе, для этого вам нужно переписать, чтобы использовать полный URL-адрес, включая имя хоста и все. Это большие накладные расходы, так что только если это критично для приложения.
Конечно, как уже упоминал Скотт Форсайт, другой вариант - использовать Redirect.
Это не поддерживается в IIS7 для нового компонента Microsoft Rewrite. Та же проблема возникает.
Я не помню, чтобы в IIS6 можно было переписывать пулы приложений. Вы делаете переписывание, а не перенаправление? Перенаправление будет работать в IIS7.
Я бы попросил Геликона на 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.