Трохи про синтаксис регулярних виразів у файлі 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, за винятком слеша / та набору символів.

І так далі.

Останнє в нашому блозі

Інтернет маркетинг
04.11.2019