我正在尝试为我的网站添加转发规则。如果匹配以下任何URL:
然后它应该重定向到
我在Windows 2016上使用URL Rewrite 2 for IIS。
我正试图将其分解为2条规则,因为我无法想到如何做到这一点。规则的第一部分是从http到https
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$" ignoreCase="true"/>
<add input="{HTTP_HOST}" pattern="localhost" negate="true"/>
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
</rules>
以上作品。
现在我需要使用https://www来处理https://这似乎没有做任何事情
<rule name="www to no subdomain redirect" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTP_HOST}" pattern="^www" ignoreCase="true"/>
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
</rules>
这意味着如果我使用http
输入规则,那么当我输入https://www.example.com时,它不会转发到https://example.com
我做错了什么?
答案 0 :(得分:1)
试试这个
<rules>
<clear />
<rule name="CanonicalHostNameRule1" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
</conditions>
<action type="Redirect" url="https://example.com/{R:1}" />
</rule>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
我有两个规则,但只有一个规则会随时执行,并确保涵盖所有逻辑。
在“www到无子域重定向”规则中,您在重定向中使用{HTTP_HOST},这将是www.example.com。
希望这有帮助!
答案 1 :(得分:1)
我做错了什么?
{HTTP_HOST}
是其范围内的常量,因此您可以从A重定向到A.
查看我写的以下规则。
规则#1 与以www.
开头的所有主机名匹配,删除www.
重定向到HTTPS。
规则#2 与除了对localhost的请求之外的所有非安全请求匹配,然后通过重复与规则#1中相同的过程重定向。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect-AllWWW-ToSecureNonWWW">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(?:www\.)(.+)$" />
</conditions>
<action type="Redirect" url="https://{C:1}/{R:0}"/>
</rule>
<rule name="Redirect-AllNonSecure-ToSecureNonWWW-ExcludingLocalhost">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^localhost$" negate="true" />
<add input="{HTTPS}" pattern="^off$" />
<add input="{HTTP_HOST}" pattern="^(?:www\.)?(.+)" />
</conditions>
<action type="Redirect" url="https://{C:1}/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>