繁体   English   中英

如何在我的站点的IIS重写模块中创建自定义规则

[英]How to create custom rules in IIS Rewrite module for my sites

我在尝试使用根路径内的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”。

感谢您的帮助。

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

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

我假设您具有以下结构-

-wwwroot

- 主要

--subdomain

大概您想要发生的是,当用户访问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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM