用于将流量重定向到非www HTTPS的IIS/Azure web.config文件的简单规则



我的目标是在IIS/Azure的web.config文件中设置规则,以成功重定向以下客户端请求示例:

HTTPS重定向:

  • 发件人:example.com
  • 收件人:https://example.com

没有www&HTTPS重定向:

  • 发件人:www.example.com
  • 收件人:https://example.com

无www,HTTPS重定向&维护路径:

  • 发件人:www.example.com/examplepage

  • 收件人:https://example.com/examplepage

到目前为止,我只取得了第1点和第2点。如果访问者直接登录在子页面上,他们不会重定向到非www,也不会重定向到HTTPS。

    <rule name="Redirect to https">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="Off"/>
        <add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
    </rule>
    <rule name="Canonical Hostname" stopProcessing="false">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^(www.)(.*)$" />
      </conditions>
      <action type="Redirect" url="https://{C:2}{REQUEST_URI}" redirectType="Permanent" />
    </rule>

我已经用尽了多个搜索结果页面和多个StackOverflow问题,但没有任何运气-它们都承诺能够实现第三点(重定向到非www,HTTPS页面维护路径),但它们对我不起作用。

谢谢你花时间读这篇文章!

我发现了这个问题,部分原因是我提出问题的方式(对不起,StackOverflowers!)。

问题在于规则的顺序。我把以下(新)规则放在我的规则部分的顶部,按照以下顺序,为那些将来遇到这个问题的人准备。现在,它重定向到HTTPS,没有www,并维护客户端请求的路径。

  <rule name="Canonical Hostname" stopProcessing="false">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{HTTP_HOST}" pattern="^(www.)(.*)$" />
    </conditions>
    <action type="Redirect" url="http://{C:2}{REQUEST_URI}" redirectType="Permanent" />
  </rule>
  <rule name="Force HTTPS" enabled="true">
    <match url="(.*)" ignoreCase="false" />
    <conditions>
      <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
  </rule>

相关内容

最新更新