Немного о синтаксисе регулярных выражений в файле Apache.htaccess

18.03.2011

Этот материал один из важнейших, поэтому рекомендую уделить ему особое внимание. В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение.

  • Круглые скобки () используются для выделения групп символов.

  • Символ ^ обозначает начало строки.

  • Символ $ обозначает конец строки.

  • Символ . обозначает любой символ.

  • Символ | обозначает альтернативу. Например, выражения "A|B" и "(ABC|DEF)" означают "A или B" и "ABC или DEF" соответственно.

  • Символ ? ставится после символа (или группы символов), который может как присутствовать, так и отсутствовать. Например, выражению "jpe?g" подойдет и строка "jpg", и строка "jpeg". Пример выражения с группой символов: "super-(puper-)?site".

  • Символ * ставится после символа (или группы символов), который может отсутствовать или присутствовать неограниченное число раз подряд. Например, выражению "jpe*g" подойдут строки "jpg", "jpeg" и "jpeeeeeeg".

  • Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз. Например, выражению "jpe+g" подойдут строки "jpeg" и "jpeeeeg", но не "jpg".

  • Квадратные скобки [] используются для перечисления допустимых символов. Например, выражение "[abc]" равносильно выражению "a|b|c", но вариант с квадратными скобками обычно является более оптимальным по быстродействию. Внутри скобок можно использовать диапазоны: например, выражение "[0-9]" равносильно выражению "[0123456789]". Если символы внутри квадратных скобок начинаются с символа ^, это означает любой символ, кроме перечисленных в скобках. Например, выражение "[^0-9]+" означает строку из любых символов, кроме цифр.

  • Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде. Например, выражению "jpe\+g" соответствует только одна строка "jpe+g".

  • Все, что расположено после символа '#', считается комментарием.

Пример фрагмента файла .htaccess для ЧПУ

  • AddDefaultCharset utf-8
  • Options +FollowSymLinks
  • RewriteEngine On
  • RewriteBase /
  • RewriteRule ^([a-zA-Z0-9_-]+)/*$ index.php/$1
  • RewriteRule ^(article|news)/(.+).html$ index.php/$1?view=$1&id=$2
  • RewriteRule ^(book)/(.+).html$ index.php/$1?view=$1&book_id=$2
  • RewriteRule ^(catalog)/(.+).htm$ index.php/$1?view=$1&id=$2
  • RewriteRule ^(catalog)/(.+).html$ index.php/$1?view=$1&parent_id=$2
  • RewriteRule ^(catalog)/(.+).html/([0-9]+)$ index.php/$1?view=$1&parent_id=$2&step=$3
  • RewriteRule ^(search)/(.+)$ index.php/$1?view=$1&text=$2
  • RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ index.php/$1?view=$1&step=$2
  • RewriteCond %{REQUEST_FILENAME} !-f
  • RewriteCond %{REQUEST_FILENAME} !-d
  • RewriteCond %{REQUEST_URI} !^/index.php
  • RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
  • RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

AddDefaultCharset utf-8 - Установить кодировку utf-8

Options +FollowSymLinks - Следовать по символьным ссылкам

RewriteEngine On - Включить правила перенаправления

RewriteBase / - Установить путь хоста сайта в / (многие быдло-хостинги добавляют к хосту лишний index.php/, который нарушает работы сайта)

RewriteRule ^([a-zA-Z0-9_-]+)/*$ index.php/$1 - Если сервер видит строчку типа news или news/, где в качестве news может быть любой набор символов латиницы, цифор, тирэ и подчёркивания - заменяет его на index.php/news, В браузерной строке будет отображаться первый вариант, а сервер будет видить второй вариант.

RewriteRule ^(catalog)/(.+).html/([0-9]+)$ index.php/$1?view=$1&parent_id=$2&step=$3 - Заменяет строчку вида catalog/что_угодно.html/2 В строку вида index.php/catalog?view=catalog&parent_id=что_угодно&step=2 Где $1 - первое выражение в скобках, всегда будет равно строке catalog $2 - втрое выражение в скобках может состоять из любого набора букв и символов, включая кириллицу и любые печатаемые символы из кодировки utf-8, за исключением слэша / и набора символов .html

И так далее.

Последнее в нашем блоге