Редирект используют, чтобы перенаправить посетителей с одной страницы на другую. Ситуаций, когда это может понадобиться, очень много. Например, нужно перенести сайт на другой домен, настроить переадресацию с HTTP на HTTPS или отправить человека на новый вариант страницы.

В этой статье рассмотрим подобные ситуации подробнее и расскажем, как сделать редирект в каждой из них. Также вы узнаете, какие бывают редиректы и чем они отличаются друг от друга.

Что внутри

  1. Какие бывают редиректы
  2. Способы настройки редиректа
  3. Примеры редиректов
  4. Когда лучше не использовать редиректы
  5. Как не стоит настраивать редиректы
  6. Синтаксис для редиректов в .htaccess

Какие бывают редиректы

Есть два основных вида редиректа: 301 Moved Permanently и 302 Moved Temporarily или 302 Found. Вообще, их больше, но в жизни вам понадобятся только эти.

Для людей разницы между видами редиректа нет, результат будет один и тот же. Но для поисковиков Moved Permanently и Moved Temporarily — разные вещи. В зависимости от того, какой редирект вы используете — 301 или 302 — поисковики по-разному воспримут цель перенаправления. В итоге ссылочный вес страницы, для которой настроили редирект, либо сохранится, либо перейдёт новой странице.

301 редирект: для постоянного перенаправления

Код 301 Moved Permanently означает, что от старой страницы вы решили отказаться и создали новую, более актуальную. Для ботов поисковых систем 301 редирект будет сигналом больше не индексировать старую страницу и удалить её из результатов поиска. При этом ссылочный вес старой страницы перейдёт на новую.

Редирект 301 используют, когда нужно:

  • перенести сайт на другой домен;
  • перенести страницу на новый адрес;
  • настроить перенаправление с HTTP на HTTPS;
  • настроить перенаправление с WWW на без WWW;
  • стандартизировать внешний вид URL-адресов;
  • отправить пользователя на более актуальную страницу, которую вы создали вместо старой;
  • сделать так, чтобы на сайт можно было зайти по нескольким доменным именам;
  • убрать дубликаты страниц.

302 редирект: для временного перенаправления

Код 302 Moved Temporarily в HTTP 1.0 или 302 Found в HTTP 1.1 означает, что старая страница ещё понадобится, но посетителям нужно временно показывать другую. Для ботов поисковых систем такой редирект будет сигналом продолжить индексировать старую страницу и оставить её в результатах поиска. При этом ссылочный вес старой страницы сохранится.

Редирект 302 используют, когда нужно:

  • скрыть исходную страницу на время, пока вы её переделываете;
  • перенаправить посетителей на дубликат страницы с временным предложением;
  • перенаправить посетителей на страницу, содержимое которой отличается от исходной;
  • провести A/B тестирование нового варианта страницы, не потеряв при этом позиции старой.

302 редирект + время = 301 редирект

По словам главного аналитика Google, если долго не убирать 302 редирект, он начнёт передавать ссылочный вес, как это делает 301 редирект. Google решит, что временный редирект настроили случайно и станет воспринимать его как постоянный.

Способы настройки редиректа

Есть четыре способа настроить редирект: в файле с настройками веб-сервера, в файле с настройками PHP, при помощи HTML или JavaScript. Каждый способ подходит для разных целей. Разберём на примерах.

В файле с настройками веб-сервера

Самый популярный способ настройки. Чаще всего его используют, когда нужно сделать 301 редирект для всех страниц сайта сразу: с HTTP на HTTPS, с WWW на без WWW, со ссылки без косой черты на ссылку с косой чертой. Но для отдельных страниц он тоже подходит. В следующем разделе рассмотрим конкретные ситуации с примерами команд.

Настройки веб-сервера хранятся в специальном текстовом документе на хостинге. В зависимости от того, какой веб-сервер вы используете, путь к файлу, его название и сами команды для редиректа будут отличаться. Если у вас Apache, настройки будут в файле .htaccess, если Nginx — в файле nginx.conf.

В файле с настройками PHP

Такой способ настройки обычно используют, когда перед редиректом нужно проверить что-то в базе данных. Например, для редиректа на страницу с ошибкой 404 в дизайне вашего сайта. Человек вводит ссылку с опечаткой, PHP видит, что в базе данных страницы с таким URL нет, после чего перенаправляет человека на страницу ошибки.

Другой пример — человек вводит логин и пароль от аккаунта. Если детали входа правильные, происходит редирект со страницы входа на домашнюю страницу аккаунта. В .htaccess настроить такое не выйдет, потому что сервер не может ничего посмотреть в базе данных.

Смысла настраивать 301 редирект с HTTP на HTTPS в настройках PHP нет, поскольку работать такой редирект будет медленнее. Это связано с тем, что запрос на открытие страницы сначала обрабатывает веб-сервер, а только потом PHP.

При помощи HTML

Такой способ медленнее предыдущих, потому что перенаправление происходит только после загрузки страницы. Обычно HTML-редирект используют, когда хотят сначала показать человеку одну страницу, а потом автоматически перенаправить на другую.

Например, вы хотите, чтобы после оформления заказа клиент в течение пяти секунд видел страницу с благодарностью за покупку, а потом автоматически попадал на главную страницу или в личный кабинет.

При помощи JavaScript

Этот способ похож по принципу работы на предыдущий, но вместо HTML используют JavaScript. Перенаправление тоже происходит только после загрузки страницы. Правда, если человек отключил в браузере JavaScript, редирект не сработает.

Google не любит HTML и JavaScript редиректы

У них плохая репутация, потому что некоторые люди используют такие редиректы в недобросовестных целях. Например, делают страницы под одни запросы, выводят их на высокие места в поисковой выдаче, а потом настраивают перенаправление на страницу с другим контентом.

В большинстве случаев Google понимает, что на странице стоит отложенный редирект. Он может решить, что владелец сайта пытается обмануть посетителей, и убрать страницу из результатов поиска. Поэтому от подобных редиректов лучше по возможности отказаться.

Рекомендации Google по поводу скрытой переадресации

Примеры редиректов

В этом разделе перечислим основные ситуации, в которых нужно настроить редирект, и дадим примеры правил для .htaccess. В некоторых случаях вам понадобится подставить свой домен вместо примера.

Перед тем как использовать правила из этого раздела, учтите несколько нюансов:

  1. Если у вас Nginx, команды будут отличаться. В этом случае просто скопируйте нужную команду и вставьте её в htaccess-конвертер для Nginx. Сервис переделает команду, и вам останется только вставить её в nginx.conf.
  2. Если у вас домен с кириллическими символами, его нужно сначала преобразовать в Punycode. Правила с символами не из латинского алфавита в .htaccess работать не будут.
  3. Во всех примерах используем редирект 301. Если вместо постоянного редиректа вам нужен временный, замените в тексте команды 301 на 302.
  4. Во всех примерах используем защищённый протокол. Если на вашем домене не стоит SSL-сертификат, замените в тексте команды HTTP на HTTPS.

301 редирект с одной страницы на другую

Такой редирект обычно настраивают, когда хотят сделать постраничный редирект с одного сайта на другой. Или когда на сайте появляется страница с дублирующим контентом. Например, у вас в блоге есть статья, которая хорошо ранжируется по некоторым запросам, но вы выпускаете вместо неё страницу с более красивым дизайном и актуальным контентом.

Старая статья после этого всё равно останется в результатах поиска. Две статьи на одну и ту же тему — не всегда хорошо. С одной стороны вы будете занимать две строчки в выдаче, но в реальности страницы могут забирать друг у друга трафик. В итоге позиции обеих статей могут даже снизиться.

Более выгодным решением будет настроить 301 редирект с одной страницы на другую. Если новая статья оптимизирована не хуже, она заберёт вес у старой, поднимется выше в выдаче и станет получать больше трафика.

Для настройки редиректа замените в тексте этого правила ссылки на адреса вашей страницы и добавьте его в .htaccess:

Redirect 301 /old-page /new-page

301 редирект с одного домена на другой

Такой редирект обычно настраивают, когда переносят сайт на новый домен или хотят, чтобы на один и тот же сайт можно было зайти с нескольких доменов. Для этого в .htaccess понадобится добавить такое правило:

RewriteCond %{HTTP_HOST} ^domen-1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domen-1\.com$
RewriteRule ^(.*)$ https://domen-2.com/$1 [R=301,L]

Если переносите сайт на новый домен, одного 301 редиректа будет недостаточно. Подробный список действий вы найдёте у нас в блоге в статье о том, как сменить домен и не потерять позиции.

Если нужно сделать перенаправление с поддомена на домен, добавьте косую черту перед точкой, которая идёт после поддомена. Например, для редиректа с blog.domen.com на domen.com правило будет таким:

RewriteCond %{HTTP_HOST} ^blog\.domen\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.blog\.domen\.com$
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

301 редирект на папку другого домена

Такой редирект может понадобиться, если вы решили перенести раздел с поддомена в подпапку. Например, сначала у вас был блог по адресу blog.domen.com, а теперь нужно перенести его на domen.com/blog. Тогда правило для редиректа будет таким:

RewriteCond %{HTTP_HOST} ^blog\.domen\.com$ [NC]
RewriteRule ^(.*)$ https://domen.com/blog/ [R=301,L]

Другой пример — консолидация двух доменов. Например, у вас есть магазин одежды odezhda.com, вы купили магазин обуви obuv.com и решили перенести его в папку на основном сайте — odezhda.com/obuv. В этом случае правило будет таким:

RewriteCond %{HTTP_HOST} ^obuv\.com$ [NC]
RewriteRule ^(.*)$ https://odezhda.com/obuv/ [R=301,L]

Если ситуация обратная и вам нужно настроить редирект с подпапки на домен, правило будет таким:

RewriteCond %{HTTP_HOST} ^odezhda\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.odezhda\.com$
RewriteRule ^obuv$ https://obuv.com/ [R=301,L]

Где ^obuv$ — название подпапки.

301 редирект с HTTP на HTTPS

Когда вы только установили SSL-сертификат, попасть на защищенную версию сайта получится, только если специально дописать перед доменом https:// в адресной строке. Если просто ввести в браузере домен, сайт откроется по протоколу HTTP.

В этом случае нужно настроить 301 редирект с HTTP на HTTPS, чтобы защищённая версия сайта открывалась, даже если человек специально добавит http:// в браузере. Для этого добавьте в .htaccess такое правило:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

301 редирект с WWW на без WWW

Обычно на одну и ту же страницу на сайте можно зайти по двум адресам: с www и без. Для поисковых систем это будут две разные страницы с одинаковым содержимым.

Чтобы не плодить дубликаты и не снижать уникальность контента, лучше выбрать какой-то один вариант написания ссылок и настроить на него 301 редирект со всех других вариантов.

Если сайт новый, основным может быть любой вариант написания, разницы нет. Если сайт уже набрал позиции, лучше выбрать тот вариант, у которого больше страниц в результатах поиска.

Это можно проверить двумя способами:

  • загуглить по очереди обе версии домена с оператором “site” (site:domen.com и site:www.domen.com) и посчитать, у какого варианта больше результатов в выдаче;
  • добавить обе версии сайта в Google Search Console и проверить количество страниц в индексе там. Этот вариант будет более точным.

Чтобы настроить редирект с WWW на без WWW, добавьте в .htaccess такой код:

RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

Если вам наоборот нужно настроить редирект с без WWW на WWW, используйте такое правило:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.domen.com/$1 [R=301,L]

301 редирект с без слеша на слэш

Так же как в примере с WWW и без WWW, на одну и ту же страницу обычно можно зайти по ссылке с косой чертой в конце и без неё. Для поисковых систем такие страницы тоже будут дубликатами.

Чтобы случайно не нарваться на санкции от поисковиков, будет правильно привести всё к одному варианту. Вот правило, которое добавит редирект 301 для ссылок без слеша на ссылки со слешем:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1/ [L,R=301]

Если хотите, чтобы все ссылки наоборот были без слеша, добавьте в .htaccess такое правило:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1 [L,R=301]

301 редирект на URL без расширения

Допустим, у вас есть страница https://domen.com/about.html, и вы бы хотели, чтобы в адресной строке отображалось только https://domen.com/about. В таком случае добавьте такое правило:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Если нужен редирект не для .html, а для другого расширения, напишите в нужных местах в правиле именно его.

301 редирект с верхнего регистра на нижний

Как и в предыдущих примерах, для поисковых ботов ссылки с разным регистром — https://domen.com/home и https://domen.com/Home — это две разные страницы.

Обычно никто не создаёт такие дубликаты, но некоторые движки делают это автоматически. В этом случае лучше выбрать какой-то главный вариант и настроить на него редирект с остальных.

Лучше всего делать такой при помощи .htaccess и PHP. Можно, конечно, только при помощи .htaccess, но тогда придётся прописывать команды для проверки каждой буквы. Это будет создавать дополнительную нагрузку на Apache. Скорее всего, незначительную, но всё равно. Поэтому лучше делать в два этапа. Для этого добавьте в .htaccess такой код:

RewriteCond %{REQUEST_URI} [A-Z][OR]
RewriteCond %{QUERY_STRING} [A-Z]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

Затем создайте в этой же папке файл rewrite-strtolower.php и добавьте в него строки:

<?php
if(isset($_GET['rewrite-strtolower-url'])) {
$url = $_GET['rewrite-strtolower-url'];
unset($_GET['rewrite-strtolower-url']);
$params = http_build_query($_GET);
if(strlen($params)) {
$params = '?' . $params;
}
// Если на целевом ресурсе нет SSL сертификата, замените https:// на http:// ниже
header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');

301 редирект для нового формата перманентных ссылок на сайте с WordPress

Если у вас сайт на WordPress и вы поменяли формат ссылок на посты или товары, ссылки старого формата перестанут работать. Допустим, до смены формата люди делились ссылками на ваш сайт в соцсетях. Когда их формат изменится, при переходе по этим ссылкам люди увидят страницу с ошибкой 404.

Для таких ситуаций тоже есть решение: сгенерируйте правило для .htaccess в специальном сервисе Yoast. Тогда старые ссылки продолжат открываться.

Когда лучше не использовать редиректы

Редирект лучше не использовать, когда на сайте есть страницы с сильно похожим содержимым или одна и та же страница доступна по нескольким URL. Google будет считать одну из таких страниц канонической, а остальные — её копиями.

Такие страницы часто бывают в интернет-магазинах. Некоторые CMS добавляют в URL страницы параметр, когда посетитель меняет на ней фильтры или сортировку. Например, выбирает размер кроссовок и он добавляется к ссылке в адресной строке браузера. В итоге у страницы помимо основного URL будет ещё несколько с различными дополнительными параметрами.

Другой пример — товар находится сразу в нескольких категориях и URL-адрес меняется в зависимости от того, из какой категории человек на него переходит. Например, есть товар — кроссовки для бега Adidas Runfalcon. Их можно найти в категории «Кроссовки», а также подкатегориях «Кроссовки Adidas» и «Кроссовки для бега».

Некоторые CMS в такой ситуации генерируют три страницы с разными адресами:

  • при переходе из категории «Кроссовки» – https://domen.com/krossovki/adidas-runfalcon
  • при переходе из подкатегории «Кроссовки Adidas» – https://domen.com/krossovki/adidas/adidas-runfalcon
  • при переходе из подкатегории «Кроссовки для бега» – https://domen.com/krossovki/running/adidas-runfalcon

Вроде и дубликаты, но не убирать же из-за этого товар из других категорий. Редирект для каждого дубликата тоже лучше не настраивать. Если товаров в каталоге много, это сотни дополнительных строк в .htaccess и дополнительная нагрузка на веб-сервер.

Лучше всего будет выбрать каноническую страницу и добавить ей атрибут rel=“canonical”. Это делают в коде страницы между тегами <HEAD></HEAD>.

Атрибут rel=”canonical” говорит поисковикам: у страницы есть дубликаты, но конкретно эту нужно считать главной. В итоге именно она будет отображаться в результатах поиска, на неё перейдёт ссылочный вес и другие характеристики дубликатов, которые влияют на позицию в выдаче.

Рекомендации Google по использованию атрибута rel=”canonical”.

Как не стоит настраивать редиректы

Бывает, нужно сделать так, чтобы сайт всегда открывался с WWW и по HTTPS. В этом случае настраивать два правила для редиректа — плохая идея. Это называется «цепочка редиректов». Когда сайт сначала перенаправляется с http://example.com на https://example.com, а потом с https://example.com на https://www.example.com.

Каждый новый редирект — это дополнительная нагрузка на веб-сервер. В итоге страница загружается медленнее. Вместо этого лучше объединить два редиректа в одном правиле. Конкретно для нашего примера оно будет таким:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} =on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Чтобы найти у себя на сайте цепочку редиректов, проверьте его при помощи сервиса httpstatus.

Синтаксис для редиректов в .htaccess

Этот раздел для тех, кто хочет попробовать понять содержимое правила или проверить его на ошибки, когда редирект не работает. Вот так выглядит синтаксис правила:

RewriteEngine On
RewriteBase /
RewriteCond %{Переменная} Условие Флаг
RewriteRule Шаблон Значение Флаг

RewriteEngine — команда, которая включает компонент веб-сервера Apache, который отвечает за редиректы. Её достаточно указать один раз перед всеми командами.

RewriteBase — команда, которая указывает путь от корневой папки сайта до файла .htaccess. В этом примере косая черта означает, что файл лежит в корневой папке сайта. Её тоже достаточно указать один раз.

RewriteCond — команда, которая определяет условия выполнения редиректа. Например, вы хотите перенаправить все URL в верхнем регистре на URL в нижнем регистре. Тогда условие будет таким: «В запросе есть URL с буквами в верхнем регистре». Если да, происходит редирект. Если нет, веб-сервер пропускает это правило. Причём в одном правиле таких условий может быть неограниченное количество.

RewriteRule — действие, которое веб-сервер должен выполнить при удовлетворении условий в строках RewriteCond.

Переменные

Помогают веб-серверу определить, что конкретно нужно проверить в строке с условием выполнения редиректа. Например, адрес сайта ввели с HTTP или с HTTPS. Или совпадает ли адрес сайта с тем, что указан в условии. Или сделать что-то с частью URL, которая идёт в запросе посетителя после домена.

Переменные всегда пишут в фигурных скобках и ставят перед ними знак процента. Вот самые популярные из них:

%{HTTP_HOST} — проверить адрес, который человек ввёл в браузере. Например, в правиле, которое перенаправляет человека на версию домена с WWW, будет эта переменная с условием ^domen.com$. Это значит «выполнить редирект, если человек ввёл в браузере domen.com». А если человек введёт www.domen.com, редирект не сработает.

%{HTTPS} — проверить, отправлен ли запрос по HTTPS протоколу. Например, в правиле, которое перенаправляет человека на версию сайта с HTTPS, будет эта переменная и условие !=on. Оно означает «Если адрес сайта ввели без HTTPS».

%{REQUEST_FILENAME} — путь к файлу или скрипту из запроса. Например, в правиле, которое добавляет слэш в конце URL, нужно убедиться, что по адресу из запроса клиента не находится важный файл. И в зависимости от ответа добавить слэш или пропустить запрос.

%{THE_REQUEST} — полный текст HTTP запроса, который браузер отправил серверу. Как вариант это может быть «GET /index.html HTTP/1.1». Эту переменную используют, когда нужно совершить редирект, при условии конкретного запроса. Например, чтобы убрать окончание .html, если браузер запрашивает страницу /index.html.

%{REQUEST_URI} — всё, что идёт в запросе пользователя после доменного имени. Например, в запросе https://domen.com/account/dashboard переменная обозначает текст /account/dashboard. Эту переменную используют, когда нужно, чтобы после срабатывания правила человек попал на ту же страницу или файл, на который хотел попасть изначально.

%{QUERY_STRING} — строка GET-параметров. Это параметры, которые идут в URL после знака ?. Например, вы ищете на сайте магазина обуви кроссовки бренда Adidas. В результате, URL с результатами поиска может выглядеть так: https://obuv.com/results/?krossovki=adidas. GET-параметры в этом случае это как раз кусочек ?krossovki=adidas.

Условия

Здесь обычно используют адрес сайта вместе со специальными символами, а иногда только символы, чтобы указать веб-серверу, в каком случае перенаправить посетителя на другую страницу.

Например, вы хотите настроить редирект домена с WWW на без WWW. Тогда условием будет имя со специальными символами: ^www.domen.com$. Оно означает, что редирект должен выполняться, только когда кто-то вводит домен с WWW.

Также с переменной в качестве условия часто используют уточняющие атрибуты. Вот два самых популярных из них:

-f — проверяет, ведёт ли запрос пользователя к реальному файлу на сервере.

Например, вы хотите сделать так, чтобы в конце URL всегда добавлялся слэш. В этом случае нужно исключить сценарии, когда в запросе человека — путь к конкретному файлу, например, domen.com/index.php. Иначе к index.php тоже добавится слэш и тогда страница не откроется, потому что это будет уже не ссылка на файл.

Чтобы таких ситуаций избежать, к переменной %{REQUEST_FILENAME} добавляют условие !-f. Тогда сервер будет пропускать запросы, которые ведут к реальным файлам.

-d — проверяет, ведёт ли запрос пользователя к реальной папке на сервере.

Здесь та же логика, что и в случае с предыдущим атрибутом, но вместо файла сервер будет искать папку. Например, вы хотите наоборот сделать так, чтобы в конце URL не было слэша. В этом случае вам понадобится исключить сценарии, когда в запросе человека — путь к папке. Иначе слэш удалится и страница не откроется, потому что будет уже не папкой, а файлом без расширения.

Символы

^ — начало строки.

$ — конец строки.

# — комментарий.

! — символ отрицания.

[0-9] — любая цифра от 0 до 9.

[A-Z] — любая буква от A до Z в верхнем регистре.

[a-z] — любая буква от A до Z в нижнем регистре.

[a-Z] — любая буква от A до Z в любом регистре.

[A-Z]{3,6} — любая строка, которая заканчивается на последовательность от 3 до 6 букв в верхнем регистре и диапазоне от A до Z.

[0-9]{3,6} — любая строка, которая заканчивается на последовательность от 3 до 6 цифр в диапазоне от 0 до 9.

. — любой символ, кроме символа конца строки.

? — повтор предыдущего символа 0 или 1 раз.

+ — повтор предыдущего символа от 1 до 65536 разов.

* — повтор предыдущего символа от 0 до 65536 разов. Например, выражению dome*n будут соответствовать значения domen, domeen, domeeeeeeeeen.

\ — экранирующий слэш. Следующий символ после него будет считаться обычным, а не спецсимволом. Иногда без такого слэша правило не будет работать. Например, когда в тексте есть точка, потому что сама по себе точка означает «любой символ».

^(.*)$ — сочетание спецсимволов, которое выбирает URL из условия RewriteCond, чтобы применить к нему действие из RewriteRule.

Флаги

Это дополнительные опции. Всегда перечисляются в квадратных скобках. Если флагов в одной строке несколько, их перечисляют через запятую, например, [L, R=301]. Вот небольшой список популярных флагов:

[R=301] — редирект вместе с его кодом. Если специально не прописать число, оставить только букву R, сработает 302 редирект. Так что для постоянного редиректа прописывайте вручную код 301.

[L] — останавливает процесс преобразования, и текущая ссылка считается окончательной. Обычно этот флаг используют в конце каждой команды.

[NC] — отключает проверку регистра символов при срабатывании правила.

[OR] — указывает на альтернативное условие. Если в правиле две строки RewriteCond, они суммируются. То есть редирект произойдёт только при удовлетворении условий в обеих строках. Если строки с условиями взаимоисключающие, используйте этот флаг. Тогда правило сработает при выполнении хотя бы одного из условий.