Разбор 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

пятнадцать + 13 =