IIS Url Rewrite Regex Обратная ссылка на неизвестное количество совпадений - PullRequest
0 голосов
/ 28 июня 2018

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

Правило следующее:

<rule name="FixDestinationCategories" stopProcessing="false">
    <match url="^([^\/]+\/){2,4}category/([^\/]+\/){2}/?$" />
    <action type="Redirect" appendQueryString="true" redirectType="Permanent" url="{R:1}" />
</rule>

Пример URL может быть следующим:

country/destinations/itineraries/itinerary/category/region/country/
another/directory/category/region/country/

Из-за проблемы на сайте я пытаюсь 301 перенаправить ссылки на сайт, чтобы удалить последние 3 сегмента URL. Число сегментов до этого может варьироваться от 2 до 4. Я хочу захватить весь путь до /category/region/country/, я также должен убедиться, что результирующий путь заканчивается косой чертой, чтобы перенаправления в приведенных выше примерах в конечном итоге:

country/destinations/itineraries/itinerary/
another/directory/

Однако, как и в данный момент, мои URL-адреса перенаправления заканчиваются следующим образом:

itinerary/
directory/

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

1 Ответ

0 голосов
/ 28 июня 2018

Необходимо сделать первую и вторую группы захвата не захватывающими, а первую группу - квантификатором для захвата:

^((?:[^/]+/){2,4})category/(?:[^/]+/){2}/?$
 ^^^^            ^          ^^

См. Демоверсию regex

((?:[^/]+/){2,4}) - это группа захвата с идентификатором 1, которая соответствует 2, 3 или 4 последовательным вхождениям из 1+ символов, отличных от /, а затем /. ?: после ( образует группу без захвата , которая используется только для группировки последовательности шаблонов, но не сохраняет подспаривание в памяти, и содержимое не может быть ссылка после того, как совпадение найдено.

Эти выделенные зеленым цветом части - это подстроки, включенные в Группу 1, заполнитель {R:1} относится к:

enter image description here

...