^ | начало строки |
$ | конец строки |
. | любой одиночный символ |
(a|b) | «a» или «b» |
(…) | группа |
[abc] | «a» или «b» или «c» |
[^abc] | не «a», не «b» и не «c» |
s | Пробел |
a? | 0 или 1 символ «а» |
a* | 0 или больше «а» |
a*? | 0 или больше «а», нежадный |
a+ | 1 или больше «а» |
a+? | 1 или больше «а», нежадный |
a{3} | ровно 3 символа «а» |
a{3,} | 3 или больше «а» |
a{3,6} | от 3 до 6 «а» |
a{3,6}? | от 3 до 6 «а», нежадный |
!(…) | Префикс «не» (действует если шаблон не подходит) |
NC | Не учитывать регистр |
OR | Комбинировать по принципу «или» |
R[=code] | Редирект, опционально с кодом |
F | Доступ запрещен (посылает 403 заголовок) |
G | «Мертвая» страница (удалена) |
P | Прокси |
L | Последнее правило |
N | Следующий круг |
C | Цепочка |
T=mime-type | Установить MIME-тип |
NS | Пропустить внутренний подзапрос |
NC | Не учитывать регистр |
QSA | Добавить строку запроса |
NE | Не экранировать при выводе |
PT | Пропустить через следующий |
S=x | Пропустить следующие х правил |
E=var:value | Установить переменную окружения |
301 | Перенесен постоянно |
302 | Перенесен временно |
403 | Доступ запрещен |
404 | Страница не найдена |
410 | «Мертвая» страница |
Переменные: HTTP заголовки | Переменные: время |
---|---|
%{HTTP_USER_AGENT} | %{TIME_YEAR} |
%{HTTP_REFERER} | %{TIME_MON} |
%{HTTP_COOKIE} | %{TIME_DAY} |
%{HTTP_FORWARDED} | %{TIME_HOUR} |
%{HTTP_HOST} | %{TIME_MIN} |
%{HTTP_PROXY_CONNECTION} | %{TIME_SEC} |
%{HTTP_ACCEPT} | %{TIME_WDAY} |
%{TIME} | |
Переменные: запрос | Переменные: сервер |
%{REMOTE_ADDR} | %{DOCUMENT_ROOT} |
%{REMOTE_HOST} | %{SERVER_ADMIN} |
%{REMOTE_IDENT} | %{SERVER_NAME} |
%{REQUEST_METHOD} | %{SERVER_ADDR} |
%{SCRIPT_FILENAME} | %{SERVER_PORT} |
%{PATH_INFO} | %{SERVER_PROTOCOL} |
%{QUERY_STRING} | %{SERVER_SOFTWARE} |
%{AUTH_TYPE} | |
Переменные: специальные | Директивы |
%{API_VERSION} | RewriteEngine |
%{THE_REQUEST} | RewriteOptions |
%{REQUEST_URI} | RewriteLog |
%{REQUEST_FILENAME} | RewriteLogLevel |
%{IS_SUBREQ} | RewriteLock |
RewriteMap | |
RewriteBase | |
RewriteCond | |
RewriteRule |
Примеры:
Правила написания редиректа:
RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]
RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]
RewriteRule [ШАБЛОН] [СТРОКА ПОДСТАНОВКИ] [ФЛАГИ]
Пример:
RewriteCond %{REQUEST_FILENAME} !-f #проверка, что не файл
RewriteCond %{REQUEST_FILENAME} !-d #проверка, что не директория
RewriteCond %{REQUEST_URI} ^.*catalog.* #условие
RewriteRule ^catalog/(.*)/(.*)$ http://%{HTTP_HOST}/$1? [R=301,L]
Редирект при смене вложенности и удалении корневой категории из урла, вида
site.ru/catalog/category-1/product-1
site.ru/category-1/product-1
Список условий:
‘-d’ является ли каталогом
‘-f’ является ли обычным файлом
‘-s’ является ли обычным файлом с ненулевым размером
‘-l’ является ли символической ссылкой
‘-F’ проверка существования файла через подзапрос
‘-U’ проверка существования URL через подзапрос
Ранее я уже писал о более простых редиректах для SEO, они тоже работают по этим правилам. Если нужны дополнительные разъяснения — пишите в комментарии, попробуем вместе во всем разобраться.