Использование IIS Rewrite Map для миграции нескольких сайтов
У нас есть сервер с несколькими отдельными сайтами:
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 ответ
Итак, я получил его на работу. Вот правило:
<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.