Отправить заявку

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

Использование регулярных выражений - это один из стандартных и правильных приёмов используемых при настройке переадресации или реализации красивых ссылок на вашем сайте. Регулярное выражение в этом случае представляет собой некий шаблон и в случае если запрашиваемый адрес удовлетворяет шаблону, срабатывает правило обработки. Недавно, к нам обратился клиент, у которого .htaccess весил около 4МБ. Когда мы его открыли - был и смех и слезы. Когда разработчики делали сайт (быдлокодеры, по другому не скажешь) - каждый урл они обрабатывали в htaccess статическим образом. Т.е. клиент, после добавления новой странице на сайте - открывал htaccess и дописывал правило для красивой ссылки на эту страницу. И для каждого раздела - у него там были сотни правил - хотя должно было быть всего одно!

В регулярном выражении можно использовать любые символы и конечно же специальные символы.

К спецсимволам относят:

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

Рассмотри пример использования круглых скобок:

RedirectMatch /([^/]*)/([^/]*)/catalog.htm$ http://artkiev.com/catalog.php?$1=$2

Данная команда выполнится в случае, если пользователь обращаясь к сайту, введет адрес содержащий, кроме имени домена ещё две директории и при этом обратится к файлу catalog.htm. То есть, например, пользователь откроет http://artkiev.com/buy/mobile/catalog.htm - то правило выполнится и будет переадресован на URL http://artkiev.com/catalog.php?buy=mobile.
Комбинация спецсимволов [^/]* расшифровывается как любое количество любых символов кроме символа "/".

 

Рассмотрим еще один пример использования символа альтернативы

RedirectMatch ^/(catalog|catalogs|shop|shops)/([^/]*)/tovar.htm$ http://artkiev.com/shop.php?go=$1

В результате делаем равносильными адреса:
http://artkiev.com/catalog/mobile/tovar.htm
http://artkiev.com/catalogs/mobile/tovar.htm
http://artkiev.com/shop/mobile/tovar.htm
http://artkiev.com/shops/mobile/tovar.htm

Другие публикации