IIS 7 Url重写和两个域

时间:2009-04-04 19:10:05

标签: iis iis-7 url-rewriting url-rewrite-module

我正在写这个问题,在这个过程中,它迫使我更加努力地思考,我自己回答,但我仍然不完全理解为什么它会解决它。

我在共享主机上拥有一个帐户,其中注册了2个域名。我正在使用Asp.Net堆栈运行一些像博客和我计划最终启动的另一个站点。我的两个域都指向了根;第一个是原来我用来注册,第二个是我添加的根域指针。这就是我希望它表现的方式:

目录结构:

Root                      (www.domain1.com)
Root --\ Blog             (www.domain1.com/blog)
Root --\ Site2            (should be directed here if www.domain2.com)
Root --\ Site2 --\ Junk   (www.domain2.com/junk)

现在,如果您输入www.domain1.com或www.domain1.com/blog,那就像预期的那样,我很好。对于www.domain2.com,我有像这样配置的重写规则(来自web.config):

<rule name="Domain2">
    <match url="(.*)(/)?" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="(www\.)?domain2\.com" ignoreCase="false" />
    </conditions>
    <action type="Rewrite" url="/site2/{R:1}" />
</rule>

如果主机是domain2.com,该规则应匹配任何路径,选择所请求资源的路径并正确格式化。因此,当有人在IIS中输入www.domain2.com/junk/default.aspx时,这将解析为www.domain2.com/site2/junk/default.aspx而用户不知道。除非用户未在子文件夹中键入尾部斜杠,否则 主要工作。 IE:

www.domain2.com(作品)
www.domain2.com/(工程)
www.domain2.com/junk/(工程)
www.domain2.com/junk(不起作用!)IIS 7在这里失去了它的大脑并将其格式化为www.domain2.com/site2/junk,因为第二个请求会自动发出尾随斜杠并且会发生404。

所以,我将动作更新为:

<action type="Rewrite" url="/site2/{R:1}/" />

这似乎已经解决了,但为什么IIS 7现在没有吐出www.domain2.com/junk2/default.aspx/?如何知道不将尾部斜杠附加到文档扩展名?

1 个答案:

答案 0 :(得分:3)

www.domain2.com/junk不起作用,因为您在匹配中添加了斜杠,但匹配的实际网址不包含它。它只包含“垃圾”。

您还需要添加:

<rule name="Domain2" stopProcessing="true">

因此,如果找到匹配,则不会评估其他规则。我怀疑你可能会看到让你困惑的是你设置的其他规则。