Заменить специфицированное c значение строки запроса картами перенаправления IIS - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать правило перенаправления для проекта. NET Core, которое заменило бы значение строки запроса, чтобы помочь развернуть миграцию для некоторых идентификаторов. Например, URL-адрес:

http://www.somesite.com/page.html?somevar=abc&id=1234&othervar=cde

должен перенаправлять на

http://www.somesite.com/page.html?somevar=abc&id=b64540a6-b12d-443f-973f-673e4451ccbe&othervar=cde

В файле перезаписи я создал карту перезаписи как таковую:

<rewriteMaps>
    <rewriteMap name="newIdentifierMap">
      <add key="1234" value="b64540a6-b12d-443f-973f-673e4451ccbe" />
    </rewriteMap>
</rewriteMaps>

Но теперь у меня возникли проблемы с созданием правила для использования этой карты. Это то, что я делал ...

<rule>
  <match url=".*" />
  <conditions>
    <add input="{newIdentifierMap:REQUEST_URI}" pattern="(.*)id=([0-9]+)(.*)" />
  </conditions>
  <action type="Redirect" url="" RedirectType="Permanent" />
</rule>

Теперь я блокирую, не зная, как именно заменить значения на карте. Спасибо за любую помощь!

Решение

После проверки ответа, предоставленного @ abraham-qian, я смог решить проблему, применив следующие правила:

<rule>
  <match url="(.*)" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="(.*)(\bid=([0-9]+))(.*)" />
  </conditions>
  <action type="Redirect" url="{R:0}?{C:1}id={newIdentifierMap:{C:3}}{C:4}" RedirectType="Permanent" appendQueryString="false" />
</rule>

<rewriteMaps>
    <rewriteMap name="newIdentifierMap">
      <add key="1234" value="b64540a6-b12d-443f-973f-673e4451ccbe" />
    </rewriteMap>
</rewriteMaps>

Кажется, это нормально работает с любым количеством переменных до или после переменной id в строке запроса.

1 Ответ

0 голосов
/ 20 июля 2020

Чтобы соответствовать сегменту идентификатора, мы могли бы использовать переменную сервера {Query_String}. Пожалуйста, обратитесь к приведенным ниже фрагментам кода:

    <rewrite>
      <rules>
        <rule name="MyRules" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
                        <add input="{QUERY_STRING}" pattern="(.*)(\bid=([0-9]+))(.*)" />
          </conditions>
<!--{C:3} is the value of id, it is referred by the above condition.-->
          <action type="Redirect" url="Https://vabqia969vm:448/{MyMap:{C:3}}" appendQueryString="false" />
        </rule>
      </rules>
      <rewriteMaps>
        <rewriteMap name="MyMapName" defaultValue="">
          <add key="1234" value="HtmlPage1.html"></add>
        </rewriteMap>
      </rewriteMaps>
</rewrite>

. Однако есть проблема, что мы должны снять флажок с опции Append Query String, иначе это приведет к бесконечному l oop, поскольку добавленная строка запроса соответствует условию. Мы должны сопоставить каждое поле запроса одно за другим. Вот так,

(somevar=.*)&(\bid=([0-9]+))&(othervar=.*)

Нам лучше изменить правила в соответствии с вашей ситуацией. Не стесняйтесь сообщить мне, чем я могу помочь.

...