Регулярные выражения в .htaccess
22 мая 2012| Рубрика: PHP
Регулярные выражения используются в 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. А получая название статьи, мы спокойно делаем выборку из БД, тем самым подгружая нужную нам статью.