如果第一条规则第一条被击中,第二条规则会被击中吗?还是会在IIS重写模块的规则#1处停止。我试图跳过具有特定来源的网页字体。
<outboundRules>
<rule name="Set Access-Control-Allow-Origin header">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?(thestatbook\.com|localhost:3000)))" />
</conditions>
<action type="Rewrite" value="{C:0}" />
</rule>
<rule name="Enable CORS for Fonts">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions>
<add input="{REQUEST_URI}" pattern="^[^\?]+\.(ttf|otf|eot|woff|woff2|svg)(\?.*)?$" />
</conditions>
<action type="Rewrite" value="*" />
</rule>
</outboundRules>发布于 2019-01-11 06:33:47
如果第一条规则第一条被击中,第二条规则会被击中吗?还是会在IIS重写模块的规则#1处停止。
据我所知,两个outboundRules都会命中。它将首先运行“设置访问-控制-允许-源标题”,然后“启用字体的CORS”。您可以编写一个简单的规则,并使用邮递员来测试它。
规则如下:
此规则将修改访问控制-允许-原产地和服务器变量.
<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>结果:

如果您只希望只触发一条规则,而不是命中另一条规则。我建议您可以尝试使用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>结果:

https://stackoverflow.com/questions/54137519
复制相似问题