【发布时间】:2010-10-17 14:04:04
【问题描述】:
我正在写这个问题,在这个过程中,它迫使我更加努力地思考,我自己回答了,虽然我仍然不完全明白为什么它解决了它。
我在共享主机上拥有一个帐户,其中注册了 2 个域。我正在使用 Asp.Net 堆栈来运行一些东西,例如博客和我计划最终启动的另一个网站。我的两个域都指向根;第一个是我用来注册的原始文件,第二个是我添加的根域指针。这是我希望它的行为方式:
目录结构:
根 (www.domain1.com) 根 --\ 博客 (www.domain1.com/blog) Root --\ Site2(如果 www.domain2.com 则应指向此处) 根 --\ Site2 --\ 垃圾 (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。这大部分按照宣传的方式工作,除非用户没有在子文件夹中键入尾部斜杠。即:
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/ ?它怎么知道不向文档扩展名附加斜杠?
【问题讨论】:
标签: iis iis-7 url-rewriting url-rewrite-module