URL重写模块的outboundRules优先级

时间:2019-01-10 21:58:51

标签: iis url-rewriting cors url-rewrite-module

如果规则1首先出现,规则2将被命中吗?还是将其停止在IIS网址重写模块的规则#1处。我正在尝试跳过具有特定来源的webfonts。

def test(df1, filename, keys=["price"]):
    x = df1.groupby(keys).size()
    x.to_csv(f"{filename}_price.txt", sep='\t')

test(df_Example, "df_Example.csv", keys=["price"])

1 个答案:

答案 0 :(得分:0)

  

如果规则1首先出现,规则2将被命中吗?还是会在IIS网址重写模块的规则#1处停止。

据我所知,两个outboundRules都会命中。它将首先运行“设置Access-Control-Allow-Origin标头”,然后运行“为字体启用CORS”。您可以编写一条简单的规则,然后使用邮递员对其进行测试。

规则如下:

此规则将修改Access-Control-Allow-Origin和Server变量。

        <outboundRules>
      <rule name="removingserverheader" enabled="true" stopProcessing="true">
        <match serverVariable="RESPONSE_SERVER" pattern=".*" />
        <action type="Rewrite" value="0" />
      </rule>

      <rule name="Enable CORS for Fonts">
        <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
        <conditions>
          <add input="{HTTP_ORIGIN}" pattern=".*" />
        </conditions>
        <action type="Rewrite" value="2" />
      </rule>
    </outboundRules>

结果:

enter image description here

如果只希望触发一个规则,则不要命中另一个规则。我建议您可以尝试使用StopProcessing标志。

这意味着当执行规则操作(即匹配规则)并且打开此标志时,这意味着将不再处理后续的规则,并将请求传递到IIS请求管道。默认情况下,此标志为关闭状态。

规则如下:

      <rewrite>
    <outboundRules>
      <rule name="removingserverheader" enabled="true" stopProcessing="true">
        <match serverVariable="RESPONSE_SERVER" pattern=".*" />
        <action type="Rewrite" value="0" />
      </rule>
      <rule name="Enable CORS for Fonts" enabled="true">
        <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
        <conditions>
          <add input="{HTTP_ORIGIN}" pattern=".*" />
        </conditions>
        <action type="Rewrite" value="2" />
      </rule>
  </outboundRules>
  </rewrite>

结果:

enter image description here