从http到https永久重定向规则中排除特定的网址

时间:2018-09-02 06:29:35

标签: url-rewrite-module

我在下面有以下重定向规则,将所有http流量强制为https。但是,我们需要提供一些在https中显示有问题的页面,并且需要强制将它们设为http,直到我们对其进行更新才能在https下工作。

  <rule name="Redirect to https" stopProcessing="true">
    <match url=".*" />
    <conditions>
      <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    </conditions>

    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
  </rule>

所有这些页面的共同点在于,“ / SSLA /”是URL的一部分。我不是我想成为的重写专家,但是我可以想到几种潜在的方法来解决此问题:

a)以某种方式更新此规则,以排除带有“ / SSLA /”的网址。

B)在此规则之前添加一个规则,该规则可以捕获带有“ / SSLA /”的任何内容,并在转到https时重定向到http,并且(在同一规则或单独的规则中?)对http请求也不起作用,但会停止处理,因此它不会达到此全局http到https重定向规则。

问题是,我对正则表达式或重写规则都不太满意,所以我不太确定如何完成这两个解决方案(实际上甚至都不确定这是处理此问题的“正确”方法)。 / p>

所以...请帮忙! :)

编辑:我应该注意,我已经更新了c#代码以将这些页面重定向到http,但是当然会导致上述规则循环。但是,我只是指出这一点,我需要仅是为了重定向规则,而不是将带有“ / SSLA”的页面的HTTP请求强制转换为https,因为该代码会将任何此类https请求重定向至http。但是,如果让重定向规则强制其中带有“ / SSLA /”的https请求到http也很麻烦,那么我可以删除执行相同操作的c#代码。

2 个答案:

答案 0 :(得分:1)

尝试使用

<match url="((?!SSLA).)*" />

inste

<match url=".*" />

答案 1 :(得分:1)

您应该使用两个重写规则:

  1. 用于重定向HTTPS-> SSLA/*页面的HTTP

  2. 用于为非SSLA/*页重定向HTTP-> HTTPS。

在下面的示例中,我如何过滤SSLAnon SSLA页面

    <rule name="Redirect to http SSLA" stopProcessing="true">
       <match url="^SSLA" />
       <conditions>
           <add input="{HTTPS}" pattern="on" ignoreCase="true" />
       </conditions>
       <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>

    <rule name="Redirect to https" stopProcessing="true">
       <match url="^SSLA" nagate="true" />
       <conditions>
           <add input="{HTTPS}" pattern="off" ignoreCase="true" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>