我正在写这个问题,在这个过程中,它迫使我更加努力地思考,我自己回答,但我仍然不完全理解为什么它会解决它。
我在共享主机上拥有一个帐户,其中注册了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/?如何知道不将尾部斜杠附加到文档扩展名?
答案 0 :(得分:3)
www.domain2.com/junk不起作用,因为您在匹配中添加了斜杠,但匹配的实际网址不包含它。它只包含“垃圾”。
您还需要添加:
<rule name="Domain2" stopProcessing="true">
因此,如果找到匹配,则不会评估其他规则。我怀疑你可能会看到让你困惑的是你设置的其他规则。