Что такое регулярные выражения, как их использовать для корпоративного сайта? Инструкция пригодится редакторам, контент-менеджерам, маркетологам.
Что такое регулярные выражения?
…Формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов…Википедия
Говоря проще — язык для умного поиска в тексте. Регулярные выражения (Regular Expressions / Eng) используют спецсимволы для обозначения групп букв/цифр/пунктуации и других частей текста. Эта тема широко освещена на разных сайтах, но мы остановимся на практическом применении в рамках задач платформы для создания сайтов Adx CMS.
Пример. Модуль перенаправлений, или «редиректы»
Решаемые задачи — поймать несколько чем-то похожих ссылок и перенаправить на «правильную» страницу либо вернуть код ошибки.
Задача 1. Остановить злоумышленников.
Реальные записи из журнала запросов:
- https://online-media.ru/.git/config — попытка найти ссылку, имя пользователя, а если повезёт и пароль к репозиторию исходного кода сайта.
- https://online-media.ru/blog/.git/config — аналогично, но в другой папке.
- https://online-media.ru/blog/.env — попытка найти случайно залитый программистом файл с переменными окружения блога.
Собираем выражение /(\.git/config|\.env)$, добавляем, проверяем — работает. Теперь злоумышленник получит ошибку 400 (Bad request или Ай-я-яй, нехорошо поступаешь) при такой попытке.
Скриншот формы редактирования редиректа с регулярным выражением
Разбираем регулярное выражение, последовательно:
- / — слэш, разделитель пути из URL. Никакой магии, просто символ.
- (\.git/config|\.env) — группа выбора логическое ИЛИ. При поиске должна найтись либо строка .git/config либо строка .env.Внутри строк используется \. — «заэкранированный» символ . (точка). Если точку не заэкранировать, то она будет означать не саму точку, а «любой символ».
- $ — символ конца строки.
Читаем выражение по-русски: слэш, за ним одна из строк «.git/config» или «.env», затем конец строки. В целом - несложно, но действенно.
С помощь группы ИЛИ можно собрать более двух строк, примеры:
- /(portal|about|test-page)/ — одна из трёх строк.
- /(www|web|wwwroot|data|database|db|bak|backup)\.(zip|rar|7z)$ — тоже реальный пример, попытка найти забытый програмистом архив с данными, кодом или резервной копией сайта.
Задача 2. Перенаправить несколько ссылок со старой версии сайта на одну страницу.
Есть много ссылок вида https://mysite.com/news/12/, https://mysite.com/news/25/, https://mysite.com/news/439/ и т.д. В адресе явно виден префикс «news» и цифровые идентификаторы каждой из новостей. Перенаправим все эти страницы на список новостей, выражение — /news/\d+/$.
В выражении видим уже знакомый нам символ конца строки $. Также видим «заэкранированную» слэшом букву «d» \d+. Эта крайне полезная последовательность означает «цифры в количестве одна или больше», а именно \d — цифра и + — спецсимвол «один или больше».
Материалы по теме