Использование IIS Rewrite Map для миграции нескольких сайтов - PullRequest
0 голосов
/ 12 июня 2018

У нас есть сервер с несколькими отдельными веб-сайтами:

domain.com/masterSite    
domain.com/site1    
domain.com/site2    
domain.com/siteN

Мы находимся в процессе миграции нескольких отдельных веб-сайтов в мультитенантное приложение (/ mastersite).Мы не делаем это все сразу;скорее мы переносим отдельные сайты (более 200) по одному.И когда сайт переносится на мультитенантный сайт, нам нужно правило переадресации.

Пример:

domain.com/site1 --> domain.com/masterSite/site1
domain.com/siteN --> domain.com/masterSite/siteN

Все имена сайтов случайные, поэтому мы будем использоватьпереписать карту.

Проблема в том, что у меня возникают проблемы с определением соответствия шаблонов при использовании карты перезаписи, так что все запросы к пути пересылаются независимо от дополнительных данных URL.

Здесь текущее состояние:

<rewrite>
      <rewriteMaps>
        <rewriteMap name="ForwardToMTDB" defaultValue="">
          <add key="/site1" value="/masterSite/site1" />
          <add key="/site2" value="/masterSite/site2" />
        </rewriteMap>
      </rewriteMaps>
      <rules>
        <rule name="Rewrite Rule" enabled="true" stopProcessing="true">
          <match url="(.+)" />
          <conditions>
            <add input="{ForwardToMTDB:{REQUEST_URI}}" pattern="(.+)" />
          </conditions>
          <action type="Redirect" url="{C:1}" logRewrittenUrl="true" redirectType="Found" />
        </rule>
      </rules>
    </rewrite>

Примеры запросов, которые ВСЕ должны идти на domain.com/masterSite/siteN

domain.com/SiteN
domain.com/siteN/ 
domain.com/siteN/foo/bar
domain.com/siteN/somePage.aspx
domain.com/siteN/blah1/blah2/blah3/blah4/etc

1 Ответ

0 голосов
/ 13 июня 2018

Итак, я получил его на работу.Вот правило:

 <rule name="Redirect Rule" enabled="true" stopProcessing="true">
      <match url="^(.+?)([/?$])" />
      <conditions logicalGrouping="MatchAny">
        <add input="{ForwardToMTDB:{R:1}}" pattern="(.+)" />
      </conditions>
      <action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Found" />
    </rule>

Мне также пришлось изменить значение ключа на карте перезаписи, чтобы исключить косую черту:

<rewriteMap name="ForwardToMTDB" defaultValue="">
  <add key="site1" value="/masterSite/site1" />
  <add key="site2" value="/masterSite/site2" />
</rewriteMap>

Я прочитал много постов, связанных с тем, что пытался,Например, в этом посте говорилось о соответствии необязательного конечного слэша.Я строил это на постоянном использовании инструмента Test Pattern в IIS, пока не получил обратную ссылку, чтобы всегда быть тем, что мне нужно, независимо от дополнительных данных в URL.

...