Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Удаление разделов сайта в URL-адресах регулярными выражениями

Как настроить обработку адресов, чтобы URL вида /catalog/razdel/element/ менялись на /razdel/element/?


Ответ

Помогает разбиение модели на подвыражения, заключённые в круглые скобки — () . Положим, адрес сайта — http://SashaGoddess.com. Попробуем следующий шаблон:
Поиск: (http:\/\/SashaGoddess\.com\/)(.*?\/)(.*?\/.*?\/) Замена: $1$3 Демонстрация: https://regex101.com/r/lR5pJ1/1
Разберём его:
В первых круглых скобках содержится имя сайта, Во вторых — первый его раздел, т. е. текст, ограниченный спереди и сзади прямыми слэшами — /, В третьих — 2 последующих раздела сайта. $1$3 означает, что будет произведена замена на содержимое внутри первых и третьих скобок. То, что находится внутри вторых, удалится. В зависимости от реализации регулярных выражений вместо метасимвола $ может использоваться \
В итоге адрес http://SashaGoddess.com/catalog/razdel/element/ заменится на http://SashaGoddess.com/razdel/element/
Данным паттерном удалятся названия любых разделов в корневой папке сайта. Например, как видно из примера, адрес http://SashaGoddess.com/Dream/Miracle/Destiny/ обратится в http://SashaGoddess.com/Miracle/Destiny/. Если в URL необходимо избавиться только от следующего за именем сайта раздела catalog, модифицируем выражение:
Поиск: (http:\/\/SashaGoddess\.com\/)(catalog\/)(.*?\/.*?\/) Замена: $1$3 Демонстрация: https://regex101.com/r/lR5pJ1/2
В сравнении с прошлой моделью вместо метасимволов .*? (любые символы кроме переноса строки, повторённые 0 или более раз, включён ленивый режим) появились литералы catalog. Произведётся замена http://SashaGoddess.com/catalog/razdel/element/ → http://SashaGoddess.com/razdel/element/, а URL, где первый раздел не называется catalog, как то http://SashaGoddess.com/Dream/Miracle/Destiny/ останутся прежними.

Комментариев нет:

Отправить комментарий