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.

http://www.iis.net/download/URLRewrite

Другие вопросы по тегам