Разбор 301 редиректа по маске

Redirect 301 (Moved Permanently) для постраничного перенаправления с одной страницы сайта на другую, например, при смене структуры каталога, склейке доменов или удалении дублей.

При настройке редиректа используется файл .htaccess, позволяющий использовать механизм mod_rewrite, который "на лету" преобразует урлы .

Ниже таблица с наиболее полным перечнем директив, флагов и переменных, а также синтаксис и шаблоны.

Синтаксис регулярных выражений
^ начало строки
$ конец строки
. любой одиночный символ
(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 «а», нежадный
!(…) Префикс «не» (действует если шаблон не подходит)
Флаги RewriteCond
NC Не учитывать регистр
OR Комбинировать по принципу «или»
Флаги RewriteRule
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, они тоже работают по этим правилам. Если нужны дополнительные разъяснения — пишите в комментарии, попробуем вместе во всем разобраться.

Post a comment

2 × 3 =


Срок проверки reCAPTCHA истек. Перезагрузите страницу.