【问题标题】:IIS 7 Url Rewriting and two domainsIIS 7 Url 重写和两个域
【发布时间】: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


    【解决方案1】:

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

    还需要补充:

    &lt;rule name="Domain2" stopProcessing="true"&gt;

    所以如果找到匹配项,它不会评估其他规则。我怀疑您可能会发现让您感到困惑的是您设置的其他规则。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 2011-05-17
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多