Метасимволы htaccess
Спецсимволы и обычные знаки | ||
---|---|---|
Спецсимволы
|
$ ^ . * + ? \ { } [ ] ( ) |
|
|
Обычные знаки
|
@ : , ' " ; - _ = <> % # ~ `& ! /
|
|
Спецсимволы | ||
Символ
|
Аналог
|
Описание |
!
|
|
Отрицание |
.
|
|
Любой символ кроме \n и перевода строки |
\
|
|
Экранирование спец символа |
|
|
[]
|
Логическое «или» |
\d
|
[0-9]
|
Все цифры |
\D
|
[^\d]
|
Все не цифры |
\s
|
[ \t\v\r\n\f]
|
Все символы пробела, включая переносы строк, табуляции и неразрывные пробелы |
\S
|
[^\s]
|
Все символы, кроме пробела, переноса строк, табуляции и неразрывного пробела |
\w
|
[0-9a-z_]
|
Все цифры или буквы включая знак подчеркивания (кириллица не входит в буквы) |
\W
|
[^\w]
|
Любой символ, кроме цифры, буквы или знака подчеркивания |
Якоря | ||
Символ
|
Пример
|
Описание |
^
|
|
Привязка к началу строки |
$
|
|
Привязка к концу строки |
Ограничитель | ||
Символ
|
Пример
|
Описание |
#
/
&
|
|
В качестве ограничителей могут выступать не только # , но и любые другие символы
(только не буквы и не цифры).Всё зависит от того, что мы хотим использовать внутри выражения.
Если будет использована решётка, то внутри её придётся
экранировать. Но если поставить ограничители & , то решётку внутри них не
придётся
экранировать.
|
Квантификаторы символьные | ||
Символ
|
Аналог
|
Описание |
+
|
{1,}
|
Символ повторяется один или более раз (оператор действует на тот символ, который стоит перед ними) |
*
|
{0,}
|
Символ повторяется ноль или более раз (оператор действует на тот символ, который стоит перед ними) |
?
|
{0,1}
|
Символ повторяется ноль или один раз, может присутствовать или нет (оператор действует на тот символ, который стоит перед ними) |
Квантификаторы {} | ||
Символ
|
Пример
|
Описание |
{5}
|
|
Пять повторений |
{2,5}
|
|
От двух до пяти повторений (оба включительно) |
{2,}
|
|
Повторяется два и более раз |
{m,n}?
|
|
Повторяется минимальное количество раз |
{m,}?
|
|
Повторяется указанное количество раз |
Набор символов, логический оператор «или» [ ] | ||
Символ
|
Пример
|
Описание |
[abv]
|
|
Диапазон символов «любое из», работает как логический оператор или |
[a-z]
|
|
Диапазон маленьких латинских букв |
[^a-z]
|
|
Исключающий диапазон символов «любое кроме маленьких латинских букв» |
[A-Z]
|
|
Диапазон больших латинских букв |
[^A-Z]
|
|
Исключающий диапазон символов «любое кроме больших латинских букв» |
[а-яё]
|
|
Диапазон маленьких русских букв |
[А-ЯЁ]
|
|
Диапазон больших русских букв |
[0-9]
|
|
Диапазон цифр от 0 до 9 |
[.+-*/]
|
|
Спецсимволы внутри [] становятся обычными символами. Это значит, что их не надо
экранировать обратным слешем. Исключение
составляют только сами [] и ^ которые нужно экранировать
|
Группа символов, логический оператор «и» ( ) | ||
Символ
|
Пример
|
Описание |
()
|
|
Группирует вместе символы, содержащиеся в круглых скобках, найдет вместе стоящие ab
|
Карманы ( ) | ||
Символ
|
Пример
|
Описание |
()
|
|
Карман - это такой способ хранения части того, что мы ищем. Карманы появляются, если
использовать скобки ( ). В RewriteRule их можно использовать подставляя порядковый
номер и знак $ . В RewriteCond тоже есть карманы доступные в RewriteRule , их можно использовать подставляя порядковый
номер и знак % .
|
Несохраняющие скобки (?: ) | ||
Символ
|
Пример
|
Описание |
(?: )
|
|
Скобки () выполняют две функции - группировка символов и функцию кармана. А что делать, если нам
нужно
сгруппировать, но
в карман не класть? Для решения такой проблемы придуманы специальные несохраняющие скобки
(?: ) -
они группируют, но не кладут в карман
|
Позитивный просмотр вперед (?: ) | ||
Символ
|
Пример
|
Описание |
(?: )
|
|
Ищет строку aaa и заменяет ее на ! , но только если после
aaa стоит x , а сам x при этом не заменит
|
Негативный просмотр вперед (?! ) | ||
Символ
|
Пример
|
Описание |
(?! )
|
|
Наоборот, говорит чего должно не быть. В следующем примере замена произойдет, только если после
aaa не стоит
x
|
Позитивный просмотр назад (?<= ) | ||
Символ
|
Пример
|
Описание |
(?<= )
|
|
Ищет строку aaa и заменяет ее на ! , но только если перед
aaa стоит
x , а сам x при этом не заменит
|
Негативный просмотр назад (?<! ) | ||
Символ
|
Пример
|
Описание |
(?<! )
|
|
В следующем примере замена произойдет, только если перед aaa не стоит
x
|
Позиции внутри строк | ||
Символ
|
Пример
|
Описание |
^
|
^a
|
Соответствует началу строкиa aa aaa
|
$
|
a$
|
Соответствует концу строки aaa aa a
|
\A
|
\Aa
|
Соответствует началу текстаa aa aaaaaa aaa |
\z
|
a\z
|
Соответствует концу текста aaa aaa aaa aa a
|
\b
|
a\b
|
Граница слова, утверждение: предыдущий символ словесный, а следующий нет, либо наоборот
aa a aaa
a aa a aa
|
\B
|
\Ba\B
|
Отсутствие границы слова a a a aa a
|
\G
|
\Ga
|
Предыдущий успешный поиск, поиск остановился на 4-й позиции, где не нашлось
aaaa aaa
|
Жадность | ||
Символ
|
Описание | |
?
|
Жадность можно ограничивать всем операторам повторения, в том числе и ? , и
{} и + и * - вот так: ?? и {}?
и
+? и *?
|
|
Флаги RewriteRule | ||
Дополнительные опции. Перечисляются в квадратных скобках через запятую, скажем
[R=301,L] .Пример использования:
|
||
Символ
|
Описание | |
R[=code]
|
Перенаправить на новый URL, опционально с кодом:
301 перенесен постоянно
302 перенесен временно
403 доступ запрещен
404 страница не найдена
410 мертвая страница
|
|
F
|
Доступ запрещен (посылает 403 заголовок) | |
G
|
Мертвая страница (удалена) | |
P
|
Прокси - по этому флагу Apache выполняет подзапрос (sub-request) к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy не входит в состав вашей сборки Apache, то применение данного флага вызовет ошибку | |
L
|
Последнее правило | |
N
|
Следующий круг (перезапуск правил) | |
C
|
Цепочка | |
T=mime-type
|
Установить MIME-тип | |
NS
|
Пропустить внутренний подзапрос | |
NC
|
Не учитывать регистр | |
QSA
|
Добавить строку запроса | |
NE
|
Не экранировать при выводе | |
PT
|
Пропустить через следующий | |
S=x
|
Пропустить следующие x правил | |
E=var:value
|
Установить переменную окружения | |
Флаги RewriteCond | ||
Дополнительные опции. Перечисляются в квадратных скобках через запятую, скажем [OR] .
Пример использования:
|
||
Символ
|
Описание | |
NC
|
Не учитывать регистр | |
OR
|
Комбинировать по принципу «или» | |
Проверки | ||
В условиях могут быть использованы проверки, причем можно предварить шаблон символом
! , чтобы обозначить несоответствие шаблону. Пример использования:
|
||
< условие
|
Лексикографически меньше | |
> условие
|
Лексикографически больше | |
= условие
|
Равенство | |
<= условие
|
Лексикографически меньше или равно | |
>= условие
|
Лексикографически больше или равно | |
-eq
|
Численно равно | |
-ge
|
Численно больше или равно | |
-gt
|
Численно больше | |
-le
|
Численно меньше или равно. Во избежание путаницы с заглавной буквой -l используйте
-L
|
|
-lt
|
Численно меньше. Во избежание путаницы с заглавной буквой -l используйте
-L
|
|
-d
|
Является ли директорией | |
-f
|
Является ли обычным файлом | |
-F
|
Существует ли файл | |
-l
|
Является ли символической ссылкой | |
-L
|
Является ли символической ссылкой. Аналог флага -l
|
|
-s
|
Является ли обычным файлом ненулевого размера | |
-U
|
Существует ли заданный URL | |
-x
|
Является ли файл исполняемым |