2010-02-13 4 views
22

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

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 р = 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

Мартейн

ответ

28

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

<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> 
+0

Спасибо, сработало! –

+1

Это сработало для меня и спасло меня день - Спасибо – Bala

36

Более надежный метод с использованием значения для выбора пункта назначения является использование 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} является обратной ссылкой на первое условие матч: значение строки запроса.
  • {Отчеты: {C: 1}} - это инструкция по поиску {C: 1} на карте Регистрация.
  • {C: 2} является обратной ссылкой ко второму условию соответствия: значение с карты регистрации.