IIS上的简单URL重写

时间:2012-04-15 04:59:12

标签: iis url-rewriting

我有 1 IIS服务器,我想用它来托管 2 不同的网站(都在端口80上)。
我一直在尝试许多不同的组合(包括重定向),每次都有东西破坏(重定向循环,404,根本不起作用等等)

我认为我需要的规则是这样的:

 - match any URL 
 - condition 1: match {HTTP_HOST} to my site URL 
 - condition 2: discard if {REQUEST_URI} is present 
 - action: rewrite URL to /dir1/index.html  

(repeat for site 2)

这里的问题似乎是条件2永远不是真的(我应该用什么来匹配{REQUEST_URI}缺席

这是完整的XML:

<rewrite>
    <rules>
        <rule name="RuleForSite1" stopProcessing="true">
            <match url="(.*)" ignoreCase="false" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^www\.mysite1\.com$" /> 
                <add input="{REQUEST_URI}" pattern=".+" negate="true" /> 
            </conditions>
            <action type="Rewrite" url="dir1/index.html" />
        </rule>
        <rule name="RuleForSite2" stopProcessing="true">
            <match url="(.*)" ignoreCase="false" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^www\.mysite2\.com$" /> 
                <add input="{REQUEST_URI}" pattern=".+" negate="true" /> 
            </conditions>
            <action type="Rewrite" url="dir2/index.html" />
        </rule>
    </rules>
</rewrite>

1 个答案:

答案 0 :(得分:3)

我终于明白了。
事实证明,{REQUEST_URI}实际上并不是空的,但当其中没有任何内容时包含/。 我还发现重定向更好。

这是我的最终设置:

<rewrite>
    <rules>
        <rule name="RuleForSite1" stopProcessing="true">
            <match url="(.*)" ignoreCase="false" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^www\.mysite1\.com$" /> 
                <add input="{REQUEST_URI}" pattern="^/$"" /> 
            </conditions>
            <action type="Redirect" url="dir1/index.html" />
        </rule>
        <rule name="RuleForSite2" stopProcessing="true">
            <match url="(.*)" ignoreCase="false" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^www\.mysite2\.com$" /> 
                <add input="{REQUEST_URI}" pattern="^/$"" /> 
            </conditions>
            <action type="Redirect" url="dir2/index.html" />
        </rule>
    </rules>
</rewrite>