2

我在尝试使用根路径内的 Web.Config 文件为 IIS 8.0 上的重定向应用程序路径编写 2 条规则时遇到问题。

1) 我需要将这些 URL 的“www.misite.com”和“missite.com”重定向到“~/main”文件夹。2) 我需要将 URL“subdomain.misite.com”重定向到“~/subdomain”文件夹。

对于我正在使用的第一个:

    <rule name="Redirect to Main" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^www.misite.com(/.*)?$" />
        <add input="{REQUEST_URI}" negate="true" pattern="/main" />
      </conditions>
      <action type="Redirect" url="http://www.misite.com/main/{R:1}" />
    </rule>

    <rule name="Redirect to Main" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^misite.com(/.*)?$" />
        <add input="{REQUEST_URI}" negate="true" pattern="/main" />
      </conditions>
      <action type="Redirect" url="http://www.misite.com/main/{R:1}" />
    </rule>

对于第二个:

    <rule name="Redirect to Subdomain" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^subdomain.misite.com(/.*)?$" />
        <add input="{REQUEST_URI}" negate="true" pattern="/subdomain" />
      </conditions>
      <action type="Redirect" url="http://www.misite.com/subdomain/{R:1}" />
    </rule>

第一条规则工作正常,但第二条当我尝试浏览“subdomain.misite.com”时,我被重定向到“http://www.misite.com/main/subdomain”。

我会感谢你的帮助。

4

1 回答 1

0

我认为您在这里混淆了重定向和重写-您描述的行为正是我所期望的引用规则。最初,请求被重定向到 www.misite.com/subdomain,然后根据您的第一条规则,请求再次被重定向到 www.misite.com/main/subdomain。我认为你想要在这里做的是重写请求,为每个子域提供正确的内容。

重定向实际上意味着“如果对 URL 'A' 的请求到达,则将浏览器转发到 URL 'B'”。有效地重写请求意味着“如果收到对 URL 'A' 的请求,则服务资源'B',就好像它URL 'A' 处一样”。

我假设您具有以下结构-

-wwwroot

- 主要的

--子域

大概您想要发生的是,当用户访问 www.domain.com/default.aspx 时,会提供“主”目录中的 default.aspx 文档,同样,当用户访问 subdomain.domain.com 时,也会提供默认值。返回“子域”目录中的 aspx 文档。

我还假设您不希望文件夹本身成为路径的一部分,即不是 subdomain.domain.com/subdomain/default.aspx

<rule name="Rewrite to Main directory" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^www.misite.com(/.*)?$" />
    <add input="{PATH_INFO}" negate="true" pattern="/main/" />
  </conditions>
  <action type="Rewrite" url="/main/{R:1}" />
</rule>

<rule name="Redirect to WWW" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^misite.com(/.*)?$" />
  </conditions>
  <action type="Redirect" url="http://www.misite.com/{R:0}" redirectType="Permanent" />
</rule>

我将您的第一个代码块的第二部分保留为重定向,因为通常认为在 SEO 的多个 URL 上提供相同的内容是不好的做法(请参阅http://support.google.com/webmasters/bin/answer. py?hl=zh-CN&answer=66359 ) 并且会给您带来分析问题。在这种情况下,我选择将 domain.com/default.aspx 重定向到 www.domain.com/default.aspx,但选择相反的方式同样有效 - 您只需要做出选择并在您的网站中始终如一地应用它。

我已经删除了重定向路径/URL 的 /main/ 部分,因为 /main/ 目录中的内容无论如何都应该由请求提供服务,将其留在路径中将有效地寻找 /main/main/default。 aspx。我还在第一个(重写)规则的路径信息条件上添加了一个否定,这意味着如果确实到达 www.domain.com/main/default.aspx 的请求将不会被重写以提供来自子的内容-directory - /main/default.aspx 将被提供,而不是 /main/main/default.aspx 中的(可能不存在的)文件。

最后子域也改为重写。

<rule name="Rewrite for Subdomain" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^subdomain.misite.com(/.*)?$" />
    <add input="{PATH_INFO}" negate="true" pattern="/subdomain/" />
  </conditions>
  <action type="Rewrite" url="/subdomain/{R:1}" />
</rule>

有关此主题的更多信息,请参阅http://weblogs.asp.net/owscott/archive/2010/01/26/iis-url-rewrite-hosting-multiple-domains-under-one-site.aspx

于 2013-01-13T00:28:52.013 回答