Модуль перезаписи 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">
 </conditions></match></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">
 </conditions></match></rule>

Вышеуказанные правила не работают. Каков правильный способ сделать это? Спасибо в Advance.

Гр

Мартейн

2 ответа

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

<rule name="Signup Redirect 1" stopprocessing="true">
 <match url="signup\.aspx$">
 <conditions>
 <add input="{QUERY_STRING}" pattern="p=1">
 </add></conditions>
 </match></rule>
<rule name="Signup Redirect 2" stopprocessing="true">
 <match url="signup\.aspx$">
 <conditions>
 <add input="{QUERY_STRING}" pattern="p=2">
 </add></conditions>
 </match></rule>


Более надежным методом использования значения для выбора адресата является использование 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=([^&]+)">
 <add input="{Signups:{C:1}}" pattern="(.+)">
 </add></add></conditions>
 <action type="Redirect" url="{C:2}" redirecttype="Temporary">
 </action></match></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">
 </add></add></add></add></rewritemap>
</rewritemaps>

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

  • {C: 1} является обратной ссылкой на совпадение первого условия: значение строки запроса.
  • {Registrations: {C: 1}} - это инструкция по поиску {C: 1} на карте регистрации.
  • {C: 2} - это обратная ссылка на совпадение второго условия: значение из карты Registrations.

licensed under cc by-sa 3.0 with attribution.