Используя Url Rewrite, я пытаюсь перенаправить / foo_bar / * в / foo / *. Я пробовал это:
<rule name="Redirect foo_bar to foo" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_URL}" pattern="^/foo_bar/(.*)" />
</conditions>
<action type="Redirect" url="/foo/{R:1}" />
</rule>
Но это просто перенаправляет на / foo / foo_bar / *. Где я ошибаюсь?
Прежде всего, вы указываете правило для соответствия всем запросам (. *), А затем добавляете условие для определенного URL-адреса.
У вас должны быть свои ограничивающие критерии в матче:
<match url="^/foo_bar/(.*)" />
тогда вам больше не нужно условие. Вы используете условия только для дополнительных критериев, не основанных на URL.
Во-вторых, {R: 1} относится ко всему URL-адресу из совпадения, поэтому, если у вас есть /foo_bar/
в URL-адресе это то, что находится в {R: 1}, что объясняет, почему он перенаправляет на / foo / foo_bar /.
С вашим новым правилом соответствия {R: 1} удерживает то, что находится в (.*)
, а не весь URL-адрес, поэтому он должен работать.