Редирект используют, чтобы перенаправить посетителей с одной страницы на другую. Ситуаций, когда это может понадобиться, очень много. Например, нужно перенести сайт на другой домен, настроить переадресацию с HTTP на HTTPS или отправить человека на новый вариант страницы.
В этой статье рассмотрим подобные ситуации подробнее и расскажем, как сделать редирект в каждой из них. Также вы узнаете, какие бывают редиректы и чем они отличаются друг от друга.
Что внутри
- Какие бывают редиректы
- Способы настройки редиректа
- Примеры редиректов
- 301 редирект с одной страницы на другую
- 301 редирект с одного домена на другой
- 301 редирект на папку другого домена
- 301 редирект с HTTP на HTTPS
- 301 редирект с WWW на без WWW
- 301 редирект с без слеша на слэш
- 301 редирект на URL без расширения
- 301 редирект с верхнего регистра на нижний
- 301 редирект для нового формата перманентных ссылок на сайте с WordPress
- Когда лучше не использовать редиректы
- Как не стоит настраивать редиректы
- Синтаксис для редиректов в .htaccess
Какие бывают редиректы
Есть два основных вида редиректа: 301 Moved Permanently и 302 Moved Temporarily или 302 Found. Вообще, их больше, но в жизни вам понадобятся только эти.
Для людей разницы между видами редиректа нет, результат будет один и тот же. Но для поисковиков Moved Permanently и Moved Temporarily — разные вещи. В зависимости от того, какой редирект вы используете — 301 или 302 — поисковики по-разному воспримут цель перенаправления. В итоге ссылочный вес страницы, для которой настроили редирект, либо сохранится, либо перейдёт новой странице.
О других редиректах читайте в статье: Коды состояния HTTP.
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 понимает, что на странице стоит отложенный редирект. Он может решить, что владелец сайта пытается обмануть посетителей, и убрать страницу из результатов поиска. Поэтому от подобных редиректов лучше по возможности отказаться.
Примеры редиректов
В этом разделе перечислим основные ситуации, в которых нужно настроить редирект, и дадим примеры правил для .htaccess. В некоторых случаях вам понадобится подставить свой домен вместо примера.
Перед тем как использовать правила из этого раздела, учтите несколько нюансов:
- Если у вас Nginx, команды будут отличаться. В этом случае просто скопируйте нужную команду и вставьте её в htaccess-конвертер для Nginx. Сервис переделает команду, и вам останется только вставить её в nginx.conf.
- Если у вас домен с кириллическими символами, его нужно сначала преобразовать в Punycode. Правила с символами не из латинского алфавита в .htaccess работать не будут.
- Во всех примерах используем редирект 301. Если вместо постоянного редиректа вам нужен временный, замените в тексте команды 301 на 302.
- Во всех примерах используем защищённый протокол. Если на вашем домене не стоит 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, они суммируются. То есть редирект произойдёт только при удовлетворении условий в обеих строках. Если строки с условиями взаимоисключающие, используйте этот флаг. Тогда правило сработает при выполнении хотя бы одного из условий.