Приоритет для исходящих Правил для модуля перезаписи URL - PullRequest
0 голосов
/ 11 января 2019

Будет ли правило № 2 попадать, если правило № 1 будет первым? Или остановится на правиле № 1 для модуля перезаписи URL IIS. Я пытаюсь пропустить веб-шрифты с определенным происхождением.

<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>

1 Ответ

0 голосов
/ 11 января 2019

Будет ли получено правило № 2, если правило № 1 будет первым? Или остановится на правиле № 1 для модуля перезаписи URL IIS.

Насколько я знаю, оба исходящих правила попадут. Сначала он запустит «Установить заголовок 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

...