Назад | Перейти на главную страницу

Перенаправление / перезапись IIS на хост для определенного подкаталога

Как разработчик, я бы хотел перенаправить определенные (AJAX) запросы на сервер DEV, а не на свой локальный веб-сервер.

Например, запрос перенаправления для подкаталога «AbcService»:

http://localhost/AbcService/json?queryString
http://dev.example.com/AbcService/json?queryString

Я не хочу перенаправлять другие запросы на localhost, например:

http://localhost/XyzService/...

Я думал, что смогу сделать это с помощью расширения IIS UrlRewrite 2.0, но пока мне не удалось придумать правило, которое работает.

Во-первых, я не уверен, нужно ли мне действие «Переписать» или «Перенаправить». Я могу заставить работать действие «Перенаправление», но данные не возвращаются. Возможны проблемы с аутентификацией.

Вот правила:

URL: *
Conditions:
 {HTTP_HOST} matches "localhost"
 {URL} matches "*/AbcService/*

Action:
Redirect (307)
URL: http://dev.example.com/AbcService/{C:2}

Где {C: 2} - это путь, следующий за "/ AbcService /" из условия {URL}.

Я не понимаю, почему переключение этого действия с действия «Перенаправить на перезапись» приводит к ошибке 404, хотя у меня точно такие же условия.

Несколько вещей:

А rewrite следует использовать, если вы хотите перейти на другой URL-адрес на том же сайте. Модуль перезаписи IIS может изменить запрошенный URL-адрес внутри, и он может быть обработан в том же существующем конвейере запросов.

А redirect требуется, если вы хотите перейти на другой сайт на том же сервере или на другом сервере, что является вашим случаем.

При использовании rewrite а также абсолютный URL-адрес, я думаю, модуль пытается разрешить это на существующем сайте и не может, поэтому он отправляет 404.

Условия добавляются к соответствующему URL-адресу, в вашем случае они вам не нужны. Ваше состояние {HTTP_HOST} всегда верно, это ваш локальный dev-box и имя, разрешенное для этого сайта (если вы не хотите, чтобы он вел себя по-другому при использовании 127.0.0.1). Состояние {URL} следует переместить в узор:

<rule name="ServerFault" patternSyntax="Wildcard" stopProcessing="true">
    <match url="AbcService/*" />
    <action type="Redirect" url="http://dev.example.com/AbcService/{R:1}" />
</rule> 

Матч смотрит на все после host slash (первая косая черта после имени хоста)

При размещении здесь вопросов о переопределении URL-адресов всегда рекомендуется размещать XML из файла web.config.

Все это до сих пор не объясняет, почему ваш метод перенаправления не работает? Может быть, просмотреть Скрипач может помочь.