Как разработчик, я бы хотел перенаправить определенные (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.
Все это до сих пор не объясняет, почему ваш метод перенаправления не работает? Может быть, просмотреть Скрипач может помочь.