设置特定域的URL重写规则

时间:2013-06-12 10:18:17

标签: iis url-rewriting web-config iis-8

对于本地开发测试,我需要捕获www.somedomain.com/XXX(其中X是路径)的所有请求,并将它们发送到localhost/somevdir/XXX

我已将此添加到我的HOSTS文件(c:\ windows \ system32 \ drivers \ etc)中:

127.0.0.1   www.mydomain.com

然后,在IIS8(Windows 8)中,我为主机www.mydomain.com添加了绑定到我的“默认网站”。这有效,我现在可以浏览www.mydomain.com/test.html并查看测试html页面。我的虚拟目录位于默认网站内。然后,我将URL重写URL添加到网站的最后一位:

<rewrite>
    <rules>
        <rule name="mydomain.com" stopProcessing="true">
            <match url="^www.mydomain.com/(.*)" />
            <action type="Rewrite" url="localhost/MyVDir/{R:1}" logRewrittenUrl="true" />
        </rule>
    </rules>
</rewrite>

但是 - 这不起作用。我得到一个404,所以看起来比赛永远不会发生。我尝试过重定向和重写,我试过没有正则表达式中的^和其他一些正则表达式的调整。有人能解释我做错了吗?

2 个答案:

答案 0 :(得分:16)

我认为以下内容应该有效:

<rule name="mydomain.com" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^(mydomain\.com|www\.mydomain\.com)$" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" />
</rule>

任何URL上的匹配都会确保检查条件,并且HTTP_HOST服务器变量似乎是检查请求的主机名的最可靠方式。您可以删除REQUEST_FILENAME输入条件,但它可以作为一个非常好的完整性检查,以确保始终提供静态文件。

答案 1 :(得分:0)

这对于捕获两个www都有好处。和非www。域的版本(带有?字符的括号表示正则表达式中的可选项),因此您不必两次写入域,这可能导致错误,写入错误的可能性是其两倍。

<rule name="mydomain.com" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^(www.)?mydomain\.com)$" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" />
</rule>
相关问题