Регулярные выражения в файле .htaccess используются в RewriteCond и RewriteRule, то есть для описания условий срабатывания правил и для описания самих правил. С помощью регулярных выражений задаются шаблоны строк. Синтаксис - такой же как в языке Perl.
Элементы
Метасимволы
Примеры шаблонов
^linux
Любые строки, начинающиеся со слова linux. Строка, начинающаяся со слова altlinux не удовлетворит критерию.
windows$
Любые строки, заканчивающиеся набором символов windows. Строка, заканчивающаяся на windows-suck под выбор не попадёт.
.*
Любой символ повторяется любое количество раз. Под критерий попадут все строки.
^(.*)$
Выбрать любую строку и сохранить её как переменную $1 для дальнейшего использования.
^(.+)/(.+)$
Разбить строку на две части: до слэша и после, части строки будут доступны по переменным $1 и $2.
Важно: так как модификатор жадный, то в первую группу попадёт максимальное количество символов, удовлетворяющих шаблону.
Слеш является таким же символом, как и все остальные.
Пример для ясности:
[0-9]{1,6}$
Выбрать все строки, оканчивающиеся от 1 до 6 цифами из диапазона от 0 до 9.
Примеры правил
В начало .htaccess обычно ставят:
Первая строка включает обработку правил, вторая — обрезает полный путь (от корня сервера) до корня сайта.
/home/papka-s-saitom/public_html/razdel/podrazdel/ — таким был путь до RewriteBase /
/razdel/podrazdel/ — таким станет после
Благодаря «RewriteBase /» удобнее делать преобразования URI (убирается привязка к физическому расположению файлов сайта на сервере).
Ставим 301 редирект с www.имя.сайта на имя.сайта
(убираем "www").
Делается для поисковых машин, чтобы не бить статистику.
При запросе файла .htaccess говорим, что он не существует (410, GONE).
Запрещаем вход на сайт Интернет Експлореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).
Изменяем переменные php и передаём обработку другому скрипту.
В этом примере запрос вида
index.php?parameter=some
преобразуется в
parameter.php?some
Убираем переменные php из запроса
(вырезаем из URI всё, что находится после знака вопроса)