2015-07-13 3 views
0

Хорошо, мне интересно, может ли кто-нибудь протянуть руку с регулярным выражением, которое я пытаюсь написать.Regex перенаправить URL-адрес, используя url rewrite

В принципе, я хочу использовать модуль urlrewrite IIS для перенаправления на определенный URL-адрес, если пользователь обращается к URL-адресу на другом сайте. Единственный улов - я должен также захватить немного строки запроса и переместить его в перенаправление.
так вот вход, то URL, который пользователь может получить доступ будет выглядеть так:

https://of.example.com/sfsv3.aspx?waform=pro&language=en

Я хочу, чтобы соответствовать этому URL (или HTTP или HTTPS, чувствительно к регистру), и захват из него также один фрагмент информации, двухбуквенный код языка. то URL я хочу, чтобы перенаправить пользователя выглядит следующим образом:

http://example.com/ca/en/ppf

(где еп заменяется любой я захвачена выше)

Итак, я работаю с модулем перезаписи IIS, и я получил мой ввод данных и регулярное выражение в, до сих пор шаблон регулярного выражения у меня есть это:

https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..)) 

поэтому в основном я имею соответствие всю строку, а также группа и подгруппа для языка, и это треска е. в диалоговом окне тестовой модели IIS это работает.

я получаю следующее

{R: 1} язык = еп

{R: 2} ан

большой! поэтому мое правило перезаписи IIS должно выглядеть так, чтобы перенаправить пользователя:

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="test" stopProcessing="true" enabled="true"> 
      <match url="https?://of.example.com/sfsv3.aspx\?waform=pro&amp;(language=(..))" ignoreCase="true" /> 
      <action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 

все это кажется мне правильным. однако перенаправление не происходит. у него, похоже, проблема с частью \? (экранированный знак вопроса, чтобы отметить начало строки запроса). если это включено, то перенаправления просто не происходит.

Можете ли вы помочь мне разобраться, как заставить его работать?

+0

Вам нужно просто избежать обратной косой черты? т. е. '.aspx \\? waform' –

+0

нет, обратная косая черта не является буквальной. это только для того, чтобы избежать? это сразу после него. –

+0

Почему не 'https?: //of.example.com/sfsv3.aspx \? Waform = pro & (language = (..))'? –

ответ

0

для записи, я понял. это специальный случай регулярного выражения, запускающий его внутри web.config как часть действия urlrewrite. в этом случае вы не можете обрабатывать строку запроса с помощью простого регулярного выражения, вам нужно ввести условия в строку запроса. Вот что в итоге закончилось:

<system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="redirect" stopProcessing="true" stopProcessing="true" enabled="true"> 
        <match url="sfsv3.aspx\.aspx" ignoreCase="true"/> 
        <conditions> 
         <add input="{QUERY_STRING}" pattern="subject=PROPRCH" /> 
         <add input="{QUERY_STRING}" pattern="(..)/subject" /> 
        </conditions> 
        <action type="Redirect" url="https://www.example.com/ca/{C:1}/forms/ppf" appendQueryString="false"/> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer>