我有一个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>
答案 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。