Модуль перезаписи 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"
чтобы сработало правило только тогда, когда шаблон не соответствует).