我有一个 web.config 文件,它自动将流量发送到 HTTPS。但是,如果有人进入 MyDomain.com 那么它将转到https://mydomain.com https://mydomain.com如果有人输入 www.mydomain.com 那么它将转到https://www.mydomain.com https://www.mydomain.com.
我希望所有流量都转到https://www.mydomain.com https://www.mydomain.com。使用 web.config 的规则元素可以实现这一点吗?我的文件目前如下所示:
<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>
The Rule
<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 http://msdn.microsoft.com/en-us/library/ms524602%28v=vs.90%29.aspx以获得完整列表。)
{SERVER_PROTOCOL}
另一个服务器变量。其格式应为“{协议}/{版本号}”。
其他选项
结论
更完整的解释请参见here http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)