Регулярные выражения в htaccessРегулярные выражения используются в RewriteCond и RewriteRule, то есть для настройки «сложного» редиректа.

На самом деле регулярные выражения – мощная штука, и с их помощью реализуются очень красивые решения, не только в файле .htaccess, но и на самом php.

Использование (настройка) htaccess лежит в основе CMS, и создание сайта на php было бы не возможно. Синтаксис регулярных выражений такой же, как и в Perl, поэтому тем, кто с ним знаком не будет каких либо проблем интегрировать его в файл настройки сервера.

Систаксис состоит из метасимволов, модификаторов и флагов.

Метасимволы в htaccess используются для задания групп в шаблонах.

  • \ – экранирование. Т.е. следующий спецсимвол из синтаксиса считается обычным символом;
  • ^ – начало строки;
  • $ – конец строки;
  • .  – любой символ;
  • | – логическое ИЛИ;
  • ( ) – группировка символов;
  • [ ] – класс символов;
  • [^…] – инвертирование класса символов.

Модификаторы в htaccess ставятся после символов, метасимволов или групп и позволяют расширять их возможности.

  • ? – символ не содержится или содержится 1 раз;
  • * – множество символов или 0;
  • + – множество символов, но хотя бы один;
  • {n} – символ содержится в количестве n, не больше и не меньше;
  • {n,} – символ повторяется минимум n раз;
  • {n,k} – символ повторяется от n до k раз.

Примеры шаблонов регулярных выражений

  • ^site – любые строки, которые начинаются с site. Т.е. sites — проходит, однако allsites не проходит;
  • link$ – аналогично, но только наоборот. Строки, которые заканчиваются на link;
  • ^(.*)$ – любая строка. В этом случае, она сохраняется в переменную $1;
  • ^[0-9]{4} – все строки, которые начинаются с четырёх цифр.

Так как же именно это используется при разработке сайтов? Вот самый простой пример.

Мы имеем такую структуру URL:

http://site.ru/article.html

Понятное дело, что создавать под каждую статью отдельный html файл бред, или использовать в качестве перехода на статью такой синтаксис

http://site.ru?post=10

Для этого в htaccess пишется следующее

RewriteEngine On

Тем самым мы включаем использование «сложного» редиректа и затем пишем правило

RewriteRule ^([^/]+).html$  /index.php?slug=$1

Тем самым,  http://site.ru/article.html  в адресной строке приравнивается к http://site.ru/index.php?slug=article

Тем самым, файл index.php получает в качестве GET параметра slug, равный article. А получая название статьи, мы спокойно делаем выборку из БД, тем самым подгружая нужную нам статью.