这个重定向规则有什么问题?

What is wrong with this redirect rule?

我正在使用下面的代码在我的 web.config 文件中创建重定向规则,该文件位于 Windows 服务器托管的网站的根目录中:

<rewrite>
  <rules>
    <clear />
    <rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
      <match url=".*cashpreview\.com\.br.*" ignoreCase ="true" />
      <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

该规则适用于地址 http://www.cashpreview.com.br/cashpreview/cashbr.htm 但不适用于 http://www.cashpreview.com.br/cashpreview/janelas.htm。如果我尝试访问第一个地址,“https”会替换“http”,但第二个地址不会发生同样的情况。我需要在正则表达式中写域,因为我有多个域共享同一个 Web 目录,只有它安装了 SSL。有人知道是什么导致了规则的这种奇怪行为吗?

现在,我发现了我的错误。我不知道匹配元素的参数 url 仅包含 url 相对于 web.config 文件所在目录的部分。因此,域永远不会是 url 的一部分。由于我有多个域共享同一个 Web 目录,因此我添加了一个新条件来检查 {HTTP_HOST} 是否为我安装了 SSL 的唯一域。因为我在站点中有 asp 文件并且我使用了包含查询字符串的 {REQUEST_URI},所以我关闭了 appendquerystring 属性。我现在的代码如下:

<rewrite>
  <rules>
    <clear />
    <rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
      <match url=".*" ignoreCase ="true"/>
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
        <add input="{HTTP_HOST}" pattern=".*cashpreview\.com\.br" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false"/>
    </rule>
  </rules>
</rewrite>

这种有时一切顺利的情况仅适用于我浏览器中缓存的数据。使用代理,那个案例也没有像我以前那样工作。