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

问题描述:

我的目标是在IIS/Azure的web.config文件中具有成功重定向以下客户端请求示例的规则:IIS/Azure web.config文件将流量重定向到非www的简单规则HTTPS

HTTPS重定向:

无www的& HTTPS重定向:

无WWW,HTTPS重定向&维持路径:

这里是我到目前为止,仅是实现点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> 

我已经筋疲力尽多个搜索结果页面,并没有任何的运气多*的问题 - 他们都承诺能够实现第三点(重定向到一个非www,HTTPS 页和维持路径)但他们没有为我工作。

感谢您花时间阅读本文!

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

问题在于规则的排序。我将以下(新)规则放在我的规则部分的顶部,按照以下顺序排列,供将来遇到此问题的人员使用。现在,它重定向到HTTPS,使用no-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>