Как настроить обработку адресов, чтобы 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/ останутся прежними.
Комментариев нет:
Отправить комментарий