karashchuk.com » Бібліотека Знань » Apache » регулярные выражения в .htaccess

Apache : регулярные выражения в .htaccess

Использование регулярных выражений это один из стандартных приёмов используемых при настройке переадресации или реализации "красивых" URL адресов на вашем сайте. Регулярное выражение в этом случае представляет собой некий шаблон, и в случае если запрашиваемый адрес удовлетворяет шаблону, то срабатывает правило переадресации. Таким образом регулярные выражение используются совместно с командами RedirectMatch и RewriteRule, RewriteCond.
В регулярном выражении можно использовать любые печатные символы, пробелы а также специальные символы. К спецсимволам относят:

Круглые скобки () - их используют для выделения групп символов. В последствии к каждой группе можно обратится по ее порядковому номеру.
Символ "^" обозначающий начало строки.
Символ "$" обозначающий конец строки.
Символ "." обозначает любой символ.
Символ "|" обозначает альтернативу.
Символ "?" ставится после символа (группы), который может как присутствовать, так и отсутствовать.
Символ "*" ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
Символ "+" действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
Квадратные скобки [] используются для перечисления допустимых символов.
Квадратные скобки [^] используются для перечисления недоступных символов.
Символ ставится перед спецсимволами, если они нужны в своём первозданном виде.
Все, что расположено после символа '#', считается комментарием.

Пример №1
Использование круглых скобок для выделения групп
RedirectMatch /([^/]*)/([^/]*)/index.html$ http://storm.in.ua/script.php?$1=$2



Разберем алгоритм работы команды из примера №1.
Данная команда выполнится в случае, если пользователь обращаясь к вашему сайту, введет адрес содержащий, кроме имени домена ещё как минимум две директории и при этом обратится к файлу index.html. То есть для URL-ов http://storm.in.ua/text/index.html, http://storm.in.ua/index.html, http://storm.in.ua/index/html/ переадресация не сработает, а для адресов http://storm.in.ua/text/8/index.html или http://storm.in.ua/text/action/8/index.html данное правило выполнится и вы будете переадресованны на URL http://storm.in.ua/script.php?text=8 и http://storm.in.ua/script.php?text/action=8 соответственно. Как вы могли заметить, в результирующий URL, вместо параметра $1, было подставлено содержимое первых скобок, а вместо парамета $2 соответственно вторых. Комбинация спецсимволов [^/]* расшифровывается как любое количество любых символов кроме символа "/". Причем, если вы внимательно присмотритесь к самому регулярному выражению, то заметите, что в нем обозначен только конец строки, таким образом в качестве параметров $1 и $2 будет выбираться предпоследняя и последняя директории соответственно.
Если же мы хотим, чтобы наше правило работало только для адресов
с двумя директориями (http://storm.in.ua/action/8/index.html или http://storm.in.ua/action/text/index.html), то нам нужно добавить символ начала строки, как в примере №2

Пример №2
Использование спецсимволов для обозначения начала и конца строки
RedirectMatch ^/([^/]*)/([^/]*)/index.html$ http://storm.in.ua/script.php?$1=$2



Пример №3
Использование символа альтернативы
RedirectMatch ^/(admin|odmin|adm)/([^/]*)/index.html$ http://storm.in.ua/adm.php?cmd=$2


В результате использования переадресации из третьего примера мы делаем равносильными адреса http://storm.in.ua/admin/login/index.html и http://storm.in.ua/odmin/login/index.html. Результатом работы в обеих случаях, пользователь будет переадресован на страницу http://storm.in.ua/adm.php?cmd=login

2017-07-02 13:54, author Respective
Да, и вот здесь вопрос: если вставлю символ сброса строки в адрес, как будут реагировать ^$?
Вы только посетили наш сайт, КОММЕНТИРОВАНИЕ будет доступно через несколько минут.
возможно у Вас отключен javascript, если включен - просто обновите страницу