Сравнение между двумя группами захвата внутри условия ввода правила перезаписи IIS web.config - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь сравнить две группы захвата внутри условия ввода URL перезаписи в IIS web.config.

Мне нужно сделать это, потому что я не хочу, чтобы пользователи обращались к языковым URL-адресам (например, / en / path), если их файл cookie с языковым кодом не соответствует языку в URL.

Я пытался добиться с помощью этого правила в моем webconfig, но кажется, что это невозможно сделать так, потому что сервер отвечает с ошибкой 500.52:

The expression "^((?!{C:2}).)*$" contains a repeat expression (one of '*', '?', '+', '{' in most contexts) that is not preceded by an expression.

Этопринимая мой {C: 2} как часть самого регулярного выражения, а не необработанную строку.

Это полное правило:

<rule name="redirect-with-lang" stopProcessing="true">
      <match url="en\/|es\/|mx\/" ignoreCase="true"/>
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
        <add input="{HTTP_COOKIE}" pattern="langpref=\w{2}\/(\w{2});" />
        <add input="{REQUEST_URI}" pattern="^(\/es\/|\/en\/|\/mx\/).+$" />
        <add input="{C:1}" pattern="^((?!{C:2}).)*$"/>
      </conditions>
      <action type="Redirect" url="/{C:1}/{C:3}" />
    </rule>

Я хочу знать, смогу ли я достичь этогопо-другому, не прибегая к JavaScript или некоторому коду сервера в Global.asax.

Спасибо

1 Ответ

1 голос
/ 09 июля 2019

Вы можете использовать это <add input="{C:1}" pattern="^((?!\{C:2\}).)*$"/> условие вместо <add input="{C:1}" pattern="^((?!{C:2}).)*$"/>

Вы получаете эту ошибку из-за фигурных скобок - {} в условии.

...