URL IIS переписывает модуль: перенаправление на основе QueryString

У меня Есть некоторые проблемы с перенаправлением к другому URL на основе параметров строки запроса. Я хочу перенаправить пользователей, которые вводят www.domain.com/signup.aspx?p=1 в:

www.domain.com/signup

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx\?p=1" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

Теперь, когда они вводят www.domain.com/signup.aspx?p=2, они должны перейти в:

www.domain.com/signup/promocode

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx\?p=2" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>

Вышеупомянутые правила не работают. Что правильный путь состоит в том, чтобы сделать это?Заранее спасибо.

Gr

Martijn

26
задан Paul Tyng 18 February 2012 в 13:55
поделиться

2 ответа

Посмотрим, работает ли это немного лучше:

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="p=1" />
  </conditions>
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="p=2" />
  </conditions>
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>
32
ответ дан 28 November 2019 в 06:26
поделиться

Более надежным методом использования значения для выбора места назначения является использование Rewrite Maps. Карта - это, по сути, таблица поиска. Это не требует создания нового правила (и дополнительной оценки URL по шаблону при каждом запросе) для каждого нового пути.

<rules>
  <rule name="Signup Redirect Map" stopProcessing="true">
    <match url="^signup\.aspx$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
      <add input="{QUERY_STRING}" pattern="p=([^&amp;]+)" />
      <add input="{Signups:{C:1}}" pattern="(.+)" />
    </conditions>
    <action type="Redirect" url="{C:2}" redirectType="Temporary" />
  </rule>
</rules>
<rewriteMaps>
  <rewriteMap name="Signups">
    <add key="1" value="signup" />
    <add key="2" value="signup/promocode" />
    <add key="3" value="signup/newcode" />
    <add key="n" value="signup/futureproof" />
  </rewriteMap>
</rewriteMaps>

Определения:

  • {C:1} - обратная ссылка на первое совпадение условия: значение строки запроса.
  • {Signups:{C:1}} - это указание искать {C:1} в карте Signups.
  • {C:2} - обратная ссылка на второе совпадение условий: значение из карты Signups.
39
ответ дан 28 November 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: