Модуль перезаписи 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>
Вышеуказанные правила не работают. Каков правильный способ сделать это? Спасибо в Advance.
Гр
Мартейн
Ответы
Ответ 1
Посмотрите, работает ли это немного лучше:
<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>
Ответ 2
Более надежным методом использования значения для выбора адресата является использование 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="(.+)" />
</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} является обратной ссылкой на совпадение первого условия: значение строки запроса.
- {Registrations: {C: 1}} - это инструкция по поиску {C: 1} на карте регистрации.
- {C: 2} - это обратная ссылка на совпадение второго условия: значение из карты Registrations.