• -50% на Хостинг и VPS! Промо-код: HG50
  • Лучший хостинг

    Синтаксис и регулярные выражения .htaccess

    Для создания правил в .htaccess, в частности при использовании RewriteRule, RewriteCond или RedirectMatch, используется специальный синтаксис и регулярные выражение. Для многих это темный лес, хотя сложного в этом ничего нет. Под синтаксисом подразумевается использование специальных символов, которые имеют особое значение.
    На регулярных выражениях стоит остановиться отдельно — это рабочие лошадки для созданий гибких правил в .htaccess. По своей сути регулярное выражение является шаблоном, с которым сравнивается исходная строка. Ниже список специальных символов и их описание:
    • “^” — символ обозначающий начало строки. При создании правил с использованием директив RedirectMatch и RewriteRule, в начале шаблона следует указывать этот символ, для обозначения начала строки.
      RewriteRule ^test$ /test2.html
      В этом примере строка должна начинаться с "test". То есть, адрес вида cat/test не будет преобразован, потому что начало строки у него "cat", а не "test"
    • “$” — символ обозначающий конец строки. Следует указывать в конце шаблона для обозначения конца строки.
      RewriteRule ^test$ /test2.html
      В этом примере строка должна заканчиваться на "test". То есть, адрес test/some_url не будет преобразован, потому что конец строки у него "some_url, а не "test".
    • “()” — круглые скобки. Используются для выделения группы символов. Группировка, в том числе необходима для использования обратных RewriteCond и RewriteRule связей.
      RewriteRule ^test/(.*).html$ /test2/$1.html
      В этом примере в скобах сгруппированы символы находящиеся после /test/ и перед .html.
    • “.” — точка. Обозначает любой символ.
      RewriteRule ^te.t$ /test2.html
      В этом примере вместо точки может быть использован любой символ, в том числе и точка. То есть teet -> test2.html или tezt -> test2.html и т.д.
    • “|” — альтернативный выбор. Например, выражения "A|B" означают "A или B".
      RewriteRule ^te(s|z|r|g)t$ /test2.html [R=301,L]
      Символы для выбора следует объединять в группы. В этом примере только с адресов /test, /tezt, /tert и /tegt будет произведен редирект на адрес /test2.html.
    • “?” — ставится после символа или группы символов. Обозначает, что этот символ (группа) может как присутствовать, так и отсутствовать.
      RewriteRule ^tes?t$ /test2.html
      "test" или "tet" будут преобразованы в test2.html. То же самое с группами символов в скобках.
    • “*” — ставится после символа (группы). Обозначает, что символ (группа) может отсутствовать или присутствовать неограниченное число раз подряд.
      RewriteRule ^te*st$ /test2.html
      tst, test или teeeeeeeeest будут преобразованы в test2.html. То же самое с группами символов в скобках.
    • “+” — действует аналогично символу “*”, но предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
      RewriteRule ^tes+t$ /test2.html
      test или tessssssst будут преобразованы в test2.html. То же самое с группами символов в скобках.
    • “[]” — квадратные скобки. Используются для перечисления допустимых диапазонов символов. Работает аналогично символу “|”, но является более оптимальным вариантом по удобству и быстродействию. Поддерживается указание диапазонов значений. [0-9] — все символы от 0 до 9, [a-z] или [A-Z] — все символы латинского алфавита. Если в в начале скобок стоит символ “^”, это означает перечисление недопустимых символов. [^0-9] — допускаются любые символы кроме цифр.
      RewriteRule ^te[a-z]t$ /test2.html
      На третьей позиции может находится любой символ латинского алфавита, /teat, /tebt, tect и т.д.
      RewriteRule ^te[a-z,0-9]t$ /test2.html
      Можно указывать диапазоны значений через запятую.
    • “{}” — фигурные скобки, указываются после символа, группы символов или диапазона символов. Означает минимальное и максимальное количество символов (групп), которое может присутствовать.
      RewriteRule ^(test){1,9}$ /test2 [R=301,L]
      В этом примере словосочетание "test" может присутствовать в строке 1 или 9 раз. То есть для /test, /testtest, или /testtesttesttesttesttesttesttesttest будет сработано перенаправление
      RewriteRule ^[a-z]{3,5}$ /test2 [R=301,L]
      В этом примере перенаправление сработает только для адресов состоящих только из латинских символов и содержащих от 3-х до 5-ти символов.
       
    • “\” — обратный слэш. Используется для экранирования спецсимволов, когда нужно использовать их именно как обычный символ, а не как спецсимвол.
      RewriteRule ^test.html$ /test2.html
      В этом примере перед "." стоит обратный слеш, соответственно точка будет воспринята именно как точка, а не как любой символ. Если его убрать, вместо точки может быть использован абсолютно любой символ.​​
    • “$N” — "N" это число от 0 до 9. Используется для обращения к группам символов из шаблона ​RewriteRule для последующей подстановки, обратная RewriteRule связь.
      RewriteRule ^test/(.*).html$ /test2/$1.html
      В этом примере все символы в круглых скобках подставляются вместо $1. /test/some-url -> /test2/some-url​​
    • “%N” — "N" это число от 0 до 9. Используется для обращения к группам символов из шаблона ​RewriteCond для последующей подстановки, обратная RewriteRule связь.
      RewriteCond %{QUERY_STRING} ^id=(.*)$
      RewriteRule ^(.*)$ /test/%1? [R=301,L]
      В этом примере группа символов в директиве RewriteCond будет подставлена вместо %1.
    Комментарии (0)

    Нет комментариев. Ваш будет первым!

    Добавить комментарий
    © 2012-2018 Hostgid.net. Все права защищены.