2014-12-11 6 views
2

У меня есть ситуация, когда я хочу использовать URL-адрес URL-адреса IIS 8, чтобы указать запросы на обслуживание из одного веб-приложения в другое. Сервисы вызываются приложением iPhone и жестко закодированы в его коде, поэтому по старым причинам URL-адрес www.myownsite.com/iPhone/myService.asmx должен предоставить услугу. Тем не менее, главный веб-сайт www становится все более сложным веб-приложением, трудоемким для развертывания (на самом деле это сайт Telerik Sitefinity), поэтому для упрощения развертывания исправлений ошибок в службах я хотел бы переместить их на отдельный сайт - services.myownsite.com. Будущие приложения будут ссылаться на это напрямую, но мне все равно нужно обслуживать устаревшие, которым нужен адрес www.URL-адрес Rewrite не работает с абсолютными URL-адресами

Эти два сайта размещаются на одном сервере iis и совместно используют IP-адрес, но имеют разные заголовки хостов. Услуга работает нормально при вызове напрямую по адресу

services.myownsite.com/iPhone/myService.asmx 

Мое желание состояло в том, чтобы использовать URL Rewrite, чтобы указать www. запросы к услугам. эквивалент.

Вот проблема: я могу заставить URL переписать на работу, но только тогда, когда переписанный URL-адрес является относительным URL-адресом. Я не могу переписать те содержащий HTTP: //

Это скорее раздражает, так как я следовал инструкциям, тесно в этом блоге MSDN, который предположил, что такой подход будет прекрасно http://blogs.msdn.com/b/carlosag/archive/2010/04/02/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx

Вот пример я имею в виду - я попробовал что-то более простое, чтобы понять, как это работает. ниже код успешно переписывает URL в другой относительный URL в том же месте, в этом случае другой сервис

   <rule name="Authentication Service" stopProcessing="true"> 
       <match url="iPhone/(.*)" /> 
       <action type="Rewrite" url="/secure/services/anotherservice.asmx" logRewrittenUrl="true" /> 
      </rule> 

Однако, если я пытаюсь использовать абсолютный URL - первый шаг на пути к будучи anble изменить URL на другой сайт - он терпит неудачу. Пример ниже

  <rule name="Authentication Service" stopProcessing="true"> 
       <match url="iPhone/(.*)" /> 
       <action type="Rewrite" url="http://www.myownsite.com/secure/services/anotherservice.asmx" logRewrittenUrl="true" /> 
      </rule> 

То, что я действительно хотел бы, чтобы иметь URL атрибут работать со значениями, как

http://services.myownsite.com/secure/services/anotherservice.asmx. 

я могу спокойно использовать регулярные выражения обратные ссылки, чтобы создать переписывания URL-адресов, я просто отрывая мои волосы от того, почему я не могу использовать ничего, кроме относительного URL-адреса в переписывании.

Помогите пожалуйста! Благодаря

+0

Лично я попытался сделать это более простым с 301 переадресацией в IIS. URL Rerwrite обычно предназначен для создания дружественных URL-адресов и сопоставления внешних с внутренними. Не перемещение сайта, что должно быть сделано с 301 переадресацией для обновления ссылок на поисковые системы. –

+0

301 перенаправление не будет работать здесь, потому что приложение iPhone, вызывающее его, недостаточно интеллектуально распознает перенаправление и соответственно меняет свой вызов. –

+0

Независимо от того, хорошо ли подход Andy R или нет, меня все еще интересует зная, как использовать модуль перезаписи IIS для создания правила на основе карты перезаписи, содержащей абсолютные URL-адреса в качестве целей. Я просто получаю HTTP 500. –

ответ

1

У меня был подобный опыт волос разрывания, что я решил следующим образом:

  1. УСТАНАВЛИВАЕТЕ Application Request Routing расширения для IIS.
  2. В диспетчере IIS откройте IIS> Ключ маршрутизации запроса приложений. Перейдите на Настройки прокси сервера и проверьте Включите прокси.

Этот флажок позволяет IIS действовать обратным прокси-сервером, поэтому теперь я могу переписать URL-адрес на абсолютный URL-адрес, а не только на относительный. (Моим вариантом использования является запрос клиента https://foo.bar.baz/resource и разрешение его на обработку https://foo.bar.baz:5678/resource, где 5678 - это порт, заблокированный моим брандмауэром.)