IIS/Azure web.config文件将流量重定向到非www的简单规则HTTPS
问题描述:
我的目标是在IIS/Azure的web.config文件中具有成功重定向以下客户端请求示例的规则:IIS/Azure web.config文件将流量重定向到非www的简单规则HTTPS
HTTPS重定向:
- 来源:example.com
- 要:https://example.com
无www的& HTTPS重定向:
- 来源:www.example.com
- 要:https://example.com
无WWW,HTTPS重定向&维持路径:
From:www.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>
我已经筋疲力尽多个搜索结果页面,并没有任何的运气多*的问题 - 他们都承诺能够实现第三点(重定向到一个非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>