使用 iis url 重写将一个域重定向到另一个域时,如何修复 https 警告?

How do I fix https warning when redirecting one domain to another domain using iis url rewrite?

我有两个域,一个被缩短了,用于发送带有查询字符串的短信,因为常规域太长了。目前,不同 IP 地址上的网页会将短域重定向到长域,如果它具有正确的查询字符串,则重定向到特定页面,否则重定向到主页。我要搬到 Azure,在那里我将只有一个 IP 地址。所以我认为 IIS URL Rewrite 能够处理这个任务。长域是一个仅限 HTTPS 的站点,它有一个 HTTPS 规则。短域不是;链接始终仅为 HTTP。我已经设置 URL Rewrite 以在 HTTPS 规则之前执行重定向,并且为这两个规则设置了 stopProcessing="true"。但是当我访问 http://mytxt.net 时,我收到一个浏览器警告,提示 SSL 证书无效。

服务器是 Windows Server 2016 IIS 10。我专门搜索了 Google 和 Stack Oveflow,但没有找到与我的问题相匹配的内容。下面是代码。

        <rule name="Txt QS Redirect" stopProcessing="true">
          <match url="^(www\.)?mytxt\.net"/>
          <conditions>
            <add input="{QUERY_STRING}" pattern="^MyQS"/>
          </conditions>
          <action type="Redirect" url="https://www.myfullsite.net/respond.aspx" appendQueryString="true" redirectType="Temporary"/>
        </rule>
        <rule name="Txt No QS Redirect" stopProcessing="true">
          <match url="^(www\.)?mytxt\.net"/>
          <conditions trackAllCaptures="false">
            <add input="{QUERY_STRING}" pattern="^MyQS" negate="true"/>
          </conditions>
          <action type="Redirect" url="https://www.myfullsite.net/" redirectType="Permanent"/>
        </rule>
        <rule name="HTTPS Redirect">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$"/>
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
        </rule>

不应该先重定向,然后协议更改为 HTTPS 吗?或者浏览器是否首先检查 SSL,当 IIS 说它已启用时,在客户端上进行协议更改?

我解决了我的问题。问题出在 match url= 正则表达式上。也许某些 IIS URL Rewrite 大师可以告诉我们原因,因为我仍然不明白。我用Failed Request Tracing发现不匹配。此方法对于解决 URL 重写问题非常有用!我将其更改为 match url=".*" 并将原始正则表达式移动到一个条件。这是工作代码。

<rule name="Txt QS Redirect" stopProcessing="true">
  <match url=".*"/>
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{HTTP_HOST}" pattern="^(www\.)?mytxt\.net"/>
    <add input="{QUERY_STRING}" pattern="^MyQS"/>
  </conditions>
  <action type="Redirect" url="https://www.myfullsite.net/respond.aspx" appendQueryString="true" redirectType="Temporary"/>
</rule>
<rule name="Txt No QS Redirect" stopProcessing="true">
  <match url=".*"/>
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{HTTP_HOST}" pattern="^(www\.)?mytxt\.net"/>
    <add input="{QUERY_STRING}" pattern="^MyQS" negate="true"/>
  </conditions>
  <action type="Redirect" url="https://www.myfullsite.net/" redirectType="Permanent"/>
</rule>

URLs,有或没有 www.,以正确的查询字符串开头的将被重定向到处理这些请求的页面;如果没有正确的查询字符串,他们将被重定向到站点的主页。