hosting:htaccess:regular-expressions

2.12.11. Регулярные выражения

Выполнять тестирование и отладку регулярных выражений удобно с помощью сервисов, вроде regex101.com или regexr.com.

В директивах .htaccess можно использовать регулярные выражения для гибкой настройки правил. Пример регулярного выражения:

RedirectMatch /([^/]*)/([^/]*)/script.php$ http://example.com/index.php?$1=$2
  • . — заменяет один любой символ.
  • ? — указывает на необязательное использование предыдущего символа (к примеру, в конструкции tes?t будут подходить как слова test так и tet).
  • * — означает, что предыдущий символ (группа символов) может повторяться (данный символ указывает необязательный повтор, то есть символ может встречаться как 0 раз, так и бесконечное множество).
  • [abc] — указывает перечень символов, совпадающих с буквами a, b или с.
    • [^abc] — перечень символов, которые не используются. То есть подойдет любой символ, кроме a, b или с.
    • [abc]* — перечень идущих подряд символов, которые будут найдены в строке.
    • [^abc]* — перечень недопустимых подряд идущих символов в строке.
  • + — означает, что предыдущий символ (группа символов) должна повторяться (в отличии от *, данный символ указывает обязательный повтор, то есть символ может встречаться как минимум 1 раз).
  • | — символ логического ИЛИ, устанавливается в группах.
  • () — группировка конструкций.
  • {x} — повторение символа несколько раз, где X — количество повторений (несколько вариантов нужно задавать через запятую).
  • \ — экранирование служебных символов для использования их в шаблонах.
  • .* — указание любого количества символов в любом порядке. /.*/ — в таком случае будут подходить все подстроки между слешами.
  • ^ — начало строки, используется в начале выражения.
  • $ — конец строки, указывается в конце строки.
  • \w — указывает на букву, цифру или подчёркивание _.
  • \W — любой символ, кроме букв, цифр и знака подчеркивания.
  • \d — указывает на любую цифру.
  • \D — указывает на любой символ, кроме цифр.
  • \s — любой символ пробела (отступа).
  • \S — любой не пробельный символ.
  • [0-9] — диапазон цифр от 0 до 9.
  • [a-z] — диапазон букв от a до z, латинский набор символов в нижнем регистре.
  • [A-Z] — диапазон букв от A до Z в верхнем регистре.
  • [a-zA-Z] или [a-Z] — диапазон букв от a до Z в любом регистре.

Для примера два URL:

  1. http://example.com/someurl/44/test/regular/expression.php
  2. http://example.com/url/4/another/test/somefile.php

Для создания шаблона переадресации, в который будут входить все запросы, которые начинаются с someurl, нужно указать так:

RewriteCond %{REQUEST_URI} ^/someurl/

В таком случае оба адреса будут подпадать под правило:

RewriteCond %{REQUEST_URI} ^/.*url/

Используя значение ИЛИ можно добиться правил для нескольких вариантов:

RewriteCond %{REQUEST_URI} ^/(someurl|url)/

Используя диапазон и повторение можно добиться правил для перебора подходящих значений, пример выведет первый адрес:

RewriteCond %{REQUEST_URI} ^(/+)[0-9]{2}(/+) 

А такой пример выведет второй адрес:

RewriteCond %{REQUEST_URI} ^(/+)[0-9](/+) 
  • hosting/htaccess/regular-expressions.txt
  • Последние изменения: 2019/10/03 09:29
  • — karlov