Модуль перезаписи IIS и вспомогательные приложения

Вот что я развернул:

Развертывание IIS

testRedirect это пустой сайт. Все вложенные приложения являются вложенными папками, которые были преобразованы в приложении. Все они являются сайтами ASP .Net MVC.

Вот что я хочу настроить:

  • Http://localhost/ должен показать содержание SiteName1 без отображения Http://localhost/SiteName1/ в адресной строке (она должна оставаться Http://localhost/)

  • Http://localhost/SiteName1/ должен показать содержание SiteName1без отображения Http://localhost/SiteName1/ в адресной строке (она должна оставаться Http://localhost/)

  • Http://localhost/SiteName2/ показывает содержание SiteName2 и отображает Http://localhost/SiteName2/ в адресной строке (То же поведение для SiteName3 & SiteName4 и любые другие сайты....)

Другими словами, я хочу, чтобы мой SiteName1 вести себя как домашний сайт

То, что я пробовал до сих пор, похоже на ответ, предоставленный @cheesemacfly здесь:

<rules>
    <rule name="Redirect if SiteName1" stopProcessing="true">
        <match url="^SiteName1/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^.*$" />
        <action type="Rewrite" url="SiteName1/{R:0}" />
    </rule>
</rules>

Он отлично работает для Case1 & 2, но не для других.

Я пытался добавить правила, как это, но это не удалось...

<rule name="if_not_SiteName1" stopProcessing="true">
   <match url="^SiteName1/(.*)$" negate="true" />
   <action type="None" />
</rule>

1 ответ

Решение

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

Это было бы что-то вроде:

<rules>
    <rule name="Redirect if SiteName1" stopProcessing="true">
        <match url="^SiteName1/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^(SiteName2|SiteName3|SiteName4)/" negate="true" />
        <action type="Rewrite" url="SiteName1/{R:0}" />
    </rule>
</rules>

Мы сохраняем перенаправление, когда SiteName1/ запрашивается (нам не нужно это менять), но правило перезаписи срабатывает только тогда, когда запрошенный URL не начинается с SiteName2/ или же SiteName3/ или же SiteName4/ (это то что url="^(SiteName2|SiteName3|SiteName4)/" значит и мы используем negate="true" чтобы сработало правило только тогда, когда шаблон не соответствует).

Другие вопросы по тегам