Web.config文件。将所有流量重定向到www.my ...使用rules元素。

时间:2012-01-17 10:46:21

标签: asp.net redirect web-config

我有一个web.config文件,可以自动将流量发送到HTTPS。但是,如果有人进入MyDomain.com,则会转到https://mydomain.com,如果有人进入www.mydomain.com,则会转到https://www.mydomain.com

我希望所有流量都转到https://www.mydomain.com。这可以使用web.config的rules元素吗?我的文件目前看起来像这样:

<rewrite>
  <rules>
      <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
          </conditions>
          <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
      </rule>
  </rules>

1 个答案:

答案 0 :(得分:23)

规则

<rule name="Redirect to www subdomain">

  <match url=".*" />

  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" negate="true" />
    <add input="{SERVER_PROTOCOL}" pattern="^(.*)(/.*)?$"/>
  </conditions>

  <action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:0}" redirectType="Permanent"/>

</rule>

规则

的说明
  • <match />将规则限制为仅路径和查询字符串与给定模式匹配的请求。在我们的例子中,我们希望匹配所有路径和查询字符串,因为我们将基于域重定向。

  • <conditions />将规则进一步限制为仅满足给定条件的匹配请求。第一个条件排除其域已经以“www”开头的请求。第二个条件是仅适用于{C:1}反向引用,它不应过滤掉任何内容。

  • <action>预先设置“www。”到域名然后重定向。

变量

  • {R:0}是对来自<match \>标记的完整匹配的反向引用。后引用应该只包含路径和查询字符串,因为这是<match \>匹配的所有内容。

  • {C:1}是对最终条件中第一个匹配组的反向引用。这应该包含{SERVER_PROTOCOL}变量中“/”的所有内容。

  • {HTTP_HOST}是包含请求域的服务器变量。 (有关完整列表,请参阅here。)

  • {SERVER_PROTOCOL}另一个服务器变量。其格式应为“{protocol} / {version number}”。

其他选项

  • <action redirectType>可以是Temporary,Found或SeeOther。 (有关详细信息,请参阅here。)

  • <conditions logicalGrouping>可以是MatchAll或MatchAny。

结论

有关更完整的说明,请参阅here