Правило перезаписи IIS с использованием сегментов пути URL - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь написать, надеюсь, одно правило перезаписи для ряда URL-адресов, которые перемещаются в другую структуру. Все URL имеют очень похожую структуру, поэтому я думаю, что должен быть способ написать одно правило для всех них.

Пример:

http://example.com/some/deep/path/a/001/my-a-data
http://example.com/some/deep/path/a/002/my-a-data2
http://example.com/some/deep/path/b/001/my-b-data
http://example.com/some/deep/path/b/002/my-b-data2
http://example.com/some/deep/path/c/001/my-c-data
http://example.com/some/deep/path/c/002/my-c-data2

Необходимо перенаправить на (соответственно):

http://example.com/a/my-a-data
http://example.com/a/my-a-data2
http://example.com/b/my-b-data
http://example.com/b/my-b-data2
http://example.com/c/my-c-data
http://example.com/c/my-c-data2

Итак, я пытаюсь узнать, есть ли способ прочитать сегменты PATH в URL, чтобы я мог просто повторно использовать их для создания окончательного URL, потому что это все там. Это просто упрощение URL.

Возможно, сделать что-то вроде

                  /{1}/{2}/{3}/{4}/{5}/{6}
http://example.com/some/deep/path/a/001/my-a-data  ->  http://example.com/{4}/{6}

Возможно ли это?

Спасибо !!!

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Рекомендуется использовать ([^ /]) + вместо (. *). Если в вашем URL есть несколько sla sh, группа захвата будет повреждена.

Например:

enter image description here

enter image description here

С уважением,

Сэм

0 голосов
/ 22 апреля 2020

Я обнаружил, как это работает.

Каждый сегмент в пути URL можно идентифицировать с параметрами {R} в правилах перезаписи. Чтобы соответствовать структуре URL-адреса, я создал следующее правило:

<rule name="Documents redirection" stopProcessing="true">
  <match url="^some/deep/path/(.*)/(.*)/(.*)$" ignoreCase="true" />
  <action type="Redirect" url="/{R:1}/{R:3}" redirectType="Permanent" />
</rule>

Каждый из (. *) Сегментов - это то, что модуль перезаписи IIS распознает как параметр {R}, поэтому для моих нужд мне понадобилось первое и третий параметр, чтобы сформировать новый URL. Я могу спокойно проигнорировать второй параметр.

Надеюсь, это поможет кому-то еще.

...