Here's what I have deployed:
testRedirect
is an empty website. All sub-applications are sub-folders that have been converted in application. All of them are ASP .Net MVC sites.
Here's what I want to setup:
Http://localhost/
must show the content ofSiteName1
without displayingHttp://localhost/SiteName1/
in the adress bar (it must stayHttp://localhost/
)Http://localhost/SiteName1/
must show the content ofSiteName1
without displayingHttp://localhost/SiteName1/
in the adress bar (it must stayHttp://localhost/
)Http://localhost/SiteName2/
shows the content ofSiteName2
and displaysHttp://localhost/SiteName2/
in the adress bar (Same behavior forSiteName3
&SiteName4
and any other sites....)
In other words, I want my SiteName1
to act like a home site
What I've tried so far, is something similar to the answer provided by @cheesemacfly here:
<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>
It works great for Case1 & 2 but not the other ones.
I tried to add rules like this one, but it was not successful...
<rule name="if_not_SiteName1" stopProcessing="true">
<match url="^SiteName1/(.*)$" negate="true" />
<action type="None" />
</rule>
I think your best option would be to trigger the rewrite rule you already have only when the url doesn't start with one of your sub-applications.
It would be something like:
<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>
We keep the redirect when SiteName1/
is requested (we don't need to change this), but the rewrite rule is triggered only when the requested url doesn't start with SiteName2/
or SiteName3/
or SiteName4/
(that's what url="^(SiteName2|SiteName3|SiteName4)/"
means and we use negate="true"
to triggered the rule only when the pattern is not matched).
来源:https://stackoverflow.com/questions/16965413/iis-rewrite-module-and-sub-applications