Немного о синтаксисе регулярных выражений в файле Apache.htaccess
Этот материал один из важнейших, поэтому рекомендую уделить ему особое внимание. В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение.
Круглые скобки () используются для выделения групп символов.
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ . обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения "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
И так далее.