30+ примеров настройки 301 редиректа в .htaccess
Содержание:
Что делать, если обнаружили скрытый редирект на сайте
Действия по исправлению зависят от причины, по которой появилась скрытая переадресация.
Внимание! Перед тем как что-то делать с работающим сайтом, создайте резервную копию на хостинге и проверьте, работает ли она
Если сайт взломали злоумышленники
У вас должны быть резервные работающие копии, попробуйте восстановить сайт. Для проверки на вирусы обратитесь к хостеру, обычно хостинги предоставляют такую услугу. Проверка покажет, где вирусы и что нужно удалить.
Можно поискать код вручную, часто зловредные элементы прописывают в этих местах:
-
в .htaccess — обычно это выглядит как определение устройства по юзер-агенту и переадресация;
-
в index.php в корне сайта — обфусцированный код в конце файла, огромные строки кода легко заметить и удалить;
-
в .js-файлах — аналогично, код в конце файла.
Обязательно обновите пароли — от хостинга, FTP, панели администратора и базы данных.
Если виноваты скрипты виджетов
Редирект на чужой сайт может работать через сторонние скрипты, плагины, шаблоны CMS, темы, другие элементы. Виноваты могут быть как новые недавно установленные плагины, так и те, которые давно стоят, но уже устарели — их могли взломать.
Если вы сами ничего не устанавливали, посмотрите историю доступов к сайту. Возможно, другие администраторы или модераторы поставили какой-то зараженный скрипт по незнанию или даже чтобы вам навредить
Что делать:
-
Найдите какую-то из страниц, на которой срабатывает переадресация мобильного трафика, посмотрите код. Если на ней находятся чужие скрипты и элементы — удаляйте их по одному. Код перенаправления нужно искать в тегах script и iframe . Он может иметь вид
-
После каждого удаления заходите на страницу со смартфона или через эмулятор браузера, и проверяйте, остался ли редирект.
-
Как только вы найдете этот вредный элемент, удалите его с других страниц. Если заражен был какой-то важный плагин, проверьте актуальность версии. Напишите разработчику, возможно, он уже поправил уязвимость.
Обязательно обновите CMS и плагины до последней стабильной версии, удалите все, что вызывает подозрение и подберите лицензионные решения с официальных источников.
Если веб-мастер сотрудничает с некачественными партнерками
Еще одна причина — веб-мастер специально или неосознанно сотрудничает с фейковыми партнерскими системами. Обычно они притворяются простыми партнерками с баннерной рекламой.
Часто такие партнерки рекламируются в Яндекс.Директе и Google Ads или присылают предложения сотрудничества на почту, представляясь маркетинговыми агентствами и обещая подозрительно высокий доход. Прекращайте работу с такими партнерками и отказывайтесь от подозрительных предложений.
С HTTP на HTTPS (другой порт)
Пример конфигурации для перенаправления запросов на другой порт — с 80 (http) на 443 (https):
server {
listen 80;
server_name domain.ru www.domain.ru;
return 301 https://$host$request_uri;
}
* в данном примере для всех обращений к сайту domain.ru по 80 порту (http) будет работать редирект на 443 порт (https) с кодом 301 (для склеивания доменов).
Также мы можем добавить условие, чтобы не перенаправлять на https для определенных ссылок, например:
server {
listen 80;
server_name domain.ru www.domain.ru;
if ($uri !~ /page.html){
return 301 https://$host$request_uri;
}
}
* в данном примере запрос на страницу /page.html будет открыт по http.
Способ 6. Псевдоредирект через IFRAME или FRAMESET.
Почему псевдоредирект? Потому что по факту редиректа не происходит, а просто в фрейме грузится нужная страничка.
Даже если растянуто на всю страничку, а основная страница не содержит кода или содержит минимальный код (например, Метрика или счётчик).
Как правило, такой редирект, не детектируется рекламными сетями, которые не пропускают редиректные ссылки (например Яндекс.Директ), а в URL-строке видно только адрес оригинальной странички с кодом, а не той что грузится во фрейме.
Вариант А — через FRAMESET:
|
<html> |
— в этом случае нельзя разместить другой код (метрику, счётчики и т.п.) на самой страничке, т.к. он все равно не выполнится
Вариант B — через IFRAME:
| <html> <head> <title>Заголовок странички</title></head> <body style=»margin: 0; padding: 0; overflow: hidden;»> <iframe src=»https://yandex.ru/» height=»100%» width=»100%» frameborder=»0″ scrolling=»yes»></iframe> Здесь можно код метрики поставить </body> |
Этот вариант уже лучше (хотя некоторые антивирусы могут блокировать iframe, но скорее всего только невидимый iframe, а в данном случае видимый) — так как можно разместить код счётчика или метрики рядом для определения статистики.
Я думаю довольно подробно поведал о всех редиректах, и всем стало более менее понятно как сделать редирект.
P.S. Обратите внимание на страницу РЕКОМЕНДУЮ, где Вы найдете качественные бесплатные курсы по блоговедению и заработку в интернет.
Жду Ваших комментариев. Подписывайтесь на обновления блога. Дмитрий Леонов | leonov-do.ru
Коды ответов HTTP
Каждый раз, когда Вы заходите на URL или отправляете запрос из браузера, используется протокол передачи гипертекста (HTTP). Это процесс, посредством которого мы запрашиваем данные, как CSS, HTML и изображения, хранящиеся на сервере. После того, как послан запрос, эти данные отвечают кодом HTTP 200 OK, означающий, что они доступны. Есть много различных видов кода ответа, самый известный – 404 Not Found; веб-страницы, а также любой другой запрашиваемый контент, например, изображения могут отвечают статусом 404.
Каждый HTTP ответ имеет определенный трехзначный номер, 404 Not Found – статусный код 4XX, указывающий ошибку клиента; 200 относится к категории 2XX и показывает, что сообщение успешно. Нас интересуют ответы HTTP-категории 3ХХ, как 301 Moved Permanently или 302 Found. Эти коды статуса специально отведены для переадресации.
В нашем случае используется перенаправление 301, потому что определенные веб-браузеры или прокси-серверы кэшируют этот тип перенаправлений и делают старую страницу недоступной.
HTML перенаправления
Один из самых простых способов перенаправления – мета-тег refresh. Можно разместить этот мета-тег внутри тега
в верхней части страницы HTML:
<meta http-equiv=”refresh” content=”0”; url=’http://new-website.com’ />
Атрибут content – атрибут задержки перед перенаправлением браузера на новую страницу, он установлен на 0 секунд
Не нужно устанавливать код состояния HTTP, но важно перепроверить написание кавычек выше (есть вложенные кавычки, поэтому лучше использовать разные типы кавычек)
Хотя этот метод самый простой для перенаправления веб-страницы, у него есть недостатки. В соответствии с W3C некоторые браузеры не воспринимают мета-тег refresh. Пользователи могут увидеть страницу А, которая загрузится раньше, чем Вы будете перенаправлены на страницу В. Также она отключает кнопку назад на старых браузерах. Поэтому этот метод не рекомендуется использовать вообще.
Лучший вариант – перенаправление сайта с JavaScript.
Автоматическое JavaScript-перенаправление на другую страницу
Если нужно автоматически перенаправить пользователя с одной страницы (URL1) на другую страницу (URL2), можно использовать следующий код:
window.location.href = 'URL2';
Необходимо вставить приведенный выше код на первую страницу (URL1). Замените URL2 на нужный адрес страницы. Лучше поместить этот код внутри элемента <head> (а не в нижней части страницы), чтобы страница перенаправлялась до того, как браузер начинает ее отображать.
СОВЕТ: Если вы используете встроенный JavaScript (т.е. без внешнего файла .js), не забудьте поместить код JavaScript в теги <script></script>.
Перенаправление на другую страницу через X секунд
В этом примере мы будем осуществлять js редирект на другую страницу через некоторое время после загрузки страницы. Например, если нужно перенаправить посетителя на главную страницу после отображения страницы приветствия в течение 5 секунд:
setTimeout(function(){
window.location.href = 'homepage-url';
}, 5 * 1000);
Необходимо вставить приведенный код JavaScript на странице приветствия. Не забудьте заменить homepage-url на URL-адрес домашней страницы.
Мы использовали метод setTimeout, чтобы указать скрипту выполнить перенаправление через 5 секунд (умножаем 5 на 1000, чтобы преобразовать секунды в миллисекунды).
СОВЕТ: В JavaScript значения времени всегда рассчитываются в миллисекундах.
Перенаправление на другую страницу, исходя из условия
Например, можно выполнить перенаправление в зависимости от браузера посетителя (хотя это не рекомендуется), размера экрана, времени суток, или другого условия.
Используйте следующий код для перенаправления посетителей, которые удовлетворяют определенному условию:
if (CONDITION) {
window.location.href = 'redirect-url';
}
Например, этот код перенаправляет посетителей на другую страницу, если ширина их экрана меньше 600 пикселов:
if (screen.width < 600) {
window.location.href = 'redirect-url';
}
Перенаправление на другую страницу на основе действий пользователя
Последний пример демонстрирует, как перенаправить посетителя, основываясь на его действиях. Вы можете привязать js редирект к любому типу действия пользователя. В данном примере для простоты мы будем обрабатывать нажатие кнопки.
Следующий код будет перенаправлять посетителя на целевую страницу после нажатия на #mybutton:
document.getElementById('mybutton').onclick = function() {
window.location.href = 'redirect-url';
};
Можно сделать то же самое, используя следующий код:
<button onclick="window.location.href = '/'">Go to Homepage</button>
Также можно связать перенаправление с любым событием или действием пользователя. Только не забудьте удостовериться, что ваши редиректы не вызовут разочарования пользователей.
Я попытался рассмотреть все возможные случаи js редиректа на другую страницу. Если я когда-либо столкнусь с другими сценариями, я добавлю их в эту статью.
Node.js перенаправления
Чтобы перенаправить с помощью Node, во-первых, нужно включить HTTP модуль и создать новый сервер, используя .writeHead () метод:
var http = require(“http”);
http.createServer(function(req, res) {
res.writeHead(301,{Location: ‘http://new-website.com’});
res.end();
}).listen(8888);
Если Вы делаете новый файл и называете его index.js, вставьте код, приведенный выше, и запустите node index.js, в командной строке вы найдете локальную версию сайта, перенаправленную на new-website.com. Но, чтобы перенаправить все сообщения в разделе /blog, нужно разобрать URL из запроса с удобным Node URL модулем:
Бесплатные вебинары по схожей тематике

Как выживать тестировщику в Agile среде
Артем Быковец

Tips&Tricks: How to Survive Meetings with Foreign Customers
Оксана Скоромная

Создание дизайна лендинга с Figma
Алла Штогрина
var http = require(“http”);
var url = require(“url”);
http.createServer(function(req, res) {
var pathname = url.parse(req.url).pathname;
res.writeHead(301,{Location: ‘http://new-website.com/’ + pathname});
res.end();
}).listen(8888);
Используя функцию .writeHead (), мы можем установит путь от запроса до конца URL строки. Теперь пользователь будет перенаправлен на тот же путь на новом сайте.
Другие настройки (CGI, Python, Node.js)
Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением .shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле .htaccess указать типы этих файлов:
Вместо «.ssi .html» укажите расширения файлов, в которых должны обрабатываться директивы SSI. Использовать в одном и том же файле PHP и SSI одновременно не рекомендуется.
Чтобы CGI/Perl-скрипты выполнялись в браузере, необходимо создать файл .htaccess и добавить в него строки:
Вместо «.cgi .pl» укажите список расширений, которые должны обрабатываться веб-сервером. Убедитесь, что у вас есть права на исполнение этих скриптов (например, 755). А в переменных PERL5LIB и LD_LIBRARY_PATH, которые указывают веб-серверу, откуда подгружать модули Perl, вместо login вставьте свой логин.
Проектам на языке Python необходим файл .htaccess с таким содержанием:
Вместо site.wsgi укажите входной файл вашего приложения.
Чтобы обрабатывать скрипты Node.js, укажите в .htaccess следующие директивы:
Замените example.com на основное имя вашего сайта, а login на логин вашего аккаунта.
Если вы не нашли ответа на свой вопрос в этом разделе, то вы всегда можете обратиться к нам за помощью через форму обратной связи в разделе «Поддержка» Панели управления.
Почему так происходит?
Дело в том, что поисковые сайты являются машинами, которым необходимо четко проиндексировать все ресурсы. Склеенные сайты затрудняют эффективность быстрой индексации, что, в свою очередь, снижает отлаженность их работы.
Наиболее опасны в этом контексте сайты, которые индексируются роботами, при этом направляя пользователя на тот ресурс, с которого происходит редирект. Но поисковые системы не всегда однозначно негативно воспринимают скрепленные сайты. Речь о функции 301-редирект.
Редирект-301 является услугой на уровне сервера. Он составляет исключение среди других аналогичных функций, поскольку практически все поисковые системы воспринимают его дружественно. В частности, крупнейший поисковый ресурс Google, который используют чаще всего, благосклонно перенаправляет услугой редиректа 301 на нужную страницу.
Причина успешного взаимодействия редиректа-301 с поисковыми ресурсами в том, что он коренным образом отличается от аналогичных услуг по оптимизации. Он составлен таким образом, что функционирует понятно для робота, коим является поисковая система. Редирект перенаправляет на нужный URL страницы однократно и окончательно.
Влияние 301-го редиректа на seo продвижение
Если вы решили перенаправить старые ссылки на новые, по средствам 301-й ошибки (moved permanently), вам возможно будет интересно узнать следующее:
1. При 301 редиректе происходит склейка адресов. Роботы поисковых систем и пользователи, открывающие сайт в браузере, перенаправляются на новую страницу с новым адресом, автоматически.
2. При склейке адресов, новый url получает полный вес страницы, ссылочную массу и такие значения, как ТИЦ.Подобный редирект — это наилучшее решение при переносе сайта на новую систему управления контента, если вы не хотите потерять позиции и рейтинг сайта. Мой seo-блог использует несколько видов 301 редиректа для перенаправления.
Собственно, давайте разбираться в вариантах сделать редирект (переадресацию) правильно.
Настраиваем редиректы для SEO
Как мы уже упоминали, это самый популярный способ использования .htaccess. Перед тем, как настраивать тот или иной вид переадресации, убедитесь, что это действительно необходимо. Например, редирект на страницы со слешем в некоторых CMS настроен по умолчанию. О настройках редиректа для SEO мы писали в блоге.
При настройке 301 редиректов помните о двух правилах:
- Избегайте нескольких последовательных перенаправлений — они увеличивают нагрузку на сервер и снижают скорость работы сайта.
- Располагайте редиректы от частных к глобальным. Например, сначала переадресация с одной страницы на другую, затем общий редирект на страницы со слешем. Это правило работает не в 100% случаев, поэтому с размещением директив нужно экспериментировать.
1. Настраиваем постраничные 301 редиректы
Это потребуется в следующих случаях:
- изменилась структура сайта и у страницы поменялся уровень вложенности;
- страница перестала существовать, но нужно сохранить ее входящий трафик (например, в случае отсутствия товара обычно делают переадресацию на товарную категорию);
- поменялся URL, что крайне нежелательно, но тоже встречается.
Просто удалить страницу — плохая идея, лучше не отдавать роботу ошибку 404, а перенаправить его на другой URL. В этом случае есть шанс не потерять позиции сайта в выдаче и целевой трафик. Настроить 301 редирект с одной страницы на другую можно при помощи директивы простого перенаправления:
- — адрес страницы от корня, без протокола и домена. Например, .
- — полный адрес страницы перенаправления, включая протокол и домен. Например, .
2. Избавляемся от дублей
Каждая страница сайта должна быть доступна только по одному адресу. Для этого должны быть настроены:
- редирект на страницы со слешем в конце URL или наоборот;
- главное зеркало — основной адрес сайта в поиске.
Сделать это можно при помощи модуля . В его составе используются специальные команды — директивы сложного перенаправления. Первой командой всегда идет включение преобразования URL:
Переадресация на слеш или наоборот
Настроить ли переадресацию на страницы со слешем или без, в каждом случае нужно решать индивидуально. Если у сайта уже накоплена история в поиске, анализируйте, каких страниц в индексе больше. Для новых сайтов обычно настраивают редирект на слеш. Проверить, не настроена ли переадресация по умолчанию, просто: удалите/добавьте слеш в конце URL. Если страница перезагрузится с новым адресом — мы имеем дубли, требуется настройка. Если URL подменяется — все в порядке. Проверять лучше несколько уровней вложенности.
Код 301 редиректа на страницы без слеша:
3. Настраиваем главное зеркало
Для начала нужно определиться, какой адрес будет являться основным для поиска. SSL-сертификат давно уже мастхэв. Просто установите его и добавьте правило в .htaccess. Не забудьте также прописать его в robots.txt.
Редирект на HTTPS
Определять, с «www» или без будет главное зеркало, можно несколькими способами:
- добавить сайт в Яндекс.Вебмастер в двух вариантах, в консоли отобразится информация, какой URL поисковик считает главным зеркалом;
- проанализировать выдачу и посмотреть, каких страниц сайта больше в индексе;
- для нового ресурса не имеет значения, с «www» или без будет адрес, выбор за вами.
После того как выбор сделан, воспользуйтесь одним из двух вариантов кода.
Редирект с без www на www
4. Перенаправляем с одного домена на другой
Самая очевидная причина настройки этого редиректа — переадресовать роботов и пользователей на другой адрес при переезде сайта на новый домен. Также им пользуются оптимизаторы для манипуляций ссылочной массой, но дроп-домены и PBN — серые технологии продвижения, которые в рамках этого материала мы затрагивать не будем.
Воспользуйтесь одним из вариантов кода:
или
Не забудьте поменять в коде «mysite1» и «mysite2» на старый и новый домен соответственно.
Типы и настройка редиректов
Типы редиректов принято разделять по тому, как они реализованы. Самый популярный у SEO-специалистов метод — серверный редирект, который настраивается в файле .htaccess (конфигурационный файл наиболее распространённого сервера Apache). Кроме того, для реализации перенаправлений можно использовать файл nginx.config, а также PHP, HTML, JavaScript.
Редиректы могут иметь разный HTTP-статус. По коду состояния HTTP поисковые системы и браузеры определяют, к какому виду относится редирект. Всего есть 9 видов таких редиректов, но на практике используются три статус-кода.
2.1. 301 Moved Permanently
301 редирект — это постоянный редирект, который демонстрирует, что документ перенесён на новый URL-адрес. 301 редирект лучший вариант для оптимизации сайта под поисковые системы. Он позволяет заменить адрес документа в выдаче со старого на новый без потери позиций и трафика.
Я собрал общие случаи использования 301 редиректа.
2.1.1. Редиректы www
Вот как настроить редирект из домена с www на домен без www:
RewriteCond %{HTTP_HOST} ^www\.bacon\.com$
RewriteRule ^(.*)$ http://bacon.com/$1
А вот так можно настроить редирект URL без www в URL с www:
RewriteCond %{HTTP_HOST} ^bacon\.com$
RewriteRule ^(.*)$ http://www.bacon.com/$1
2.1.2. Изменение расширения файла
Если вы перешли на другую платформу или CMS, и в этом процессе были изменены только URL-адреса, вы должны использовать следующую переадресацию.
RedirectMatch 301 (.*)\.php$ http://www.bacon.com$1.html
2.1.3. Редирект с разных доменов и поддоменов
Если вы купили несколько доменов в разных доменных зонах или перепроектировали новый сайт в поддомене, вы должны установить редирект со всех дополнительных доменов или поддоменов на основной домен:
RewriteCond%{HTTP_HOST}!^www\.site\.com.(.*)$
RewriteRule ^(.*)$ http://www.site.com. %1/$1
2.1.4. Слеши в конце URL-адреса
Вы должны помнить, что поисковые системы рассматривают URL-адреса с и без слеша (https://www.bacon.com/sandwich/ и https://www.bacon.com/sandwich) как два разных URL-адреса. Определите, какой из них более подходит для вашего сайта, и настройте следующие переадресации.
Чтобы удалить слеш в конце URL-адреса:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1
Чтобы добавить слеш в конце URL-адреса:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1/
2.1.5. Переключение с HTTP на HTTPS
Вам необходимо установить команду для 301 редиректа на HTTPS-версию сайта. Если у вас есть WordPress CMS с управлением хостингом cPanel, вы можете прочитать подробное руководство по переходу на HTTPS.
2.1.6. Управление битыми ссылками
Если вы навсегда удалили одну из своих страниц и создали новую, установите 301 редирект на главную или новую страницу и удалите все ссылки на эту страницу на своём сайте.
RewriteRule ^old/URL/path$ http://site.com/new/path
Подробнее читайте в посте о том, как найти битые ссылки.
2.2. 302 Found, 302 Moved Temporarily
302 редирект демонстрирует, что запрошенный ресурс временно перемещён. Данный вид редиректа может быть использован для страниц с краткосрочными акциями и распродажами конкретного товара. Не рекомендую использовать его для адресов, изменённых навсегда. Роботы поисковых систем индексируют только ту страницу, на которую установлен редирект, но в выдаче останется старый URL. Однако, если робот поисковой системы решит, что вы по ошибке настроили 302 редирект вместо 301, он заменит адрес в выдаче, как и в случае с 301 редиректом. И вернуть его обратно будет проблематично.
Вы можете прописать такую директиву в файле .htaccess, чтобы установить редирект:
Redirect 302 /old.html http://localhost/new.html
2.3. 307 Moved Temporarily
Временный редирект, который указывает, что документ временно доступен по другому URL. Отличие от 302: сохранение метода передачи запроса (GET, POST), который указывает поисковикам, что кешировать документ не стоит (если нет дополнительных указаний).
Вы можете установить 307 Moved Temporarily, когда контент перемещается только временно (например, при перепроектировании). Это позволяет поисковикам понять, что ваш сервер совместим с HTTP 1.1.
Кроме того, клиенты не должны автоматически переадресовывать запросы POST / PUT / DELETE. Кэширование должно выполняться только в том случае, если в ответе сервера есть заголовки Cache-Control или Expires.
Перенаправления Apache
Возможно, самый удобный способ перенаправления – добавление определенных правил в файл `.htaccess` на веб-сервере Apache.
`.htaccess` – документ, дающий нам возможность отдавать команды Apache, программному обеспечению, работающему на сервере. Чтобы перенаправить пользователей, нужно создать новый (или отредактировать существующий) файл .htaccess и добавить его в корневой каталог старого сайта. Мы будем добавлять данное правило:
Redirect 301 / http://www.new-website.com
Любая страница, открытая на старом сайте, перенаправляется на новую. Как Вы видите, мы ставим код ответа прямо перед правилом переадресации.
Этот вид переадресации работает только на серверах Linux с включенным mod_rewrite, модулем Apache, позволяющим нам перенаправить запрашиваемые URL-адреса на сервере, если определенный образец найден, он будет изменять запрос некоторым способом. Большинство хостинг-компаний поддерживают это по умолчанию.
Вернемся к нашему примеру, если использовать код, приведенный выше, то пользователь перейдет к «old-website.com/blog/post» и будет перенаправлен по адресу «new-website.com». Неудобно то, что пользователи не видят реальную запрашиваемую страницу. Поэтому добавим следующее правило для нашего `.htaccess` файла, чтобы перенаправить все сообщения блога на нужную страницу:
RedirectMatch 301 /blog(.*) http://www.new-website.com$1
Если необходимо перенаправить отдельные страницы по определенному адресу, можно добавить правила, например, так:
Видео курсы по схожей тематике:

UX/UI Design Стартовый
Артур Рыгус

UX/UI Design мобильных приложений
Владислав Шевченко

Создаем игру типа “Pokémon Go“
Роман Самчук
По ошибке пользователи могут быть перенаправлены на страницу 404:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 404.html
</IfModule>
Сначала нужно проверить, доступен ли модуль mod_rewrite и включить его. В случае, когда файл или каталог не найден, пользователь попадет на нашу страницу 404. Он увидит содержимое страницы 404.html файла в то время, как запрашиваемый URL останется тем же.
Перенаправления Nginx
Для серверов, работающих на Nginx, в `nginx.conf` файл нужно добавить блок для обработки перенаправления запросов:
server {
listen 80;
server_name old-website.com;
return 301 $scheme://new-website.com$request_url;
}
Как сделать редирект URL-адресов с помощью mod_rewrite Apache
Более функциональный способ редиректа с помощью Apache — использовать его переписывающий модуль mod_rewrite. Вот несколько примеров, которые можно добавить в .htaccess или в файл конфигурации Apache.
Пример 1: Редирект с www на без www
Этот код редиректа HTML перенаправляет все www-версии URL-адресов на их эквивалентные версии без www.
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule (.*) http://example.com/$1
</IfModule>
Это называется канонизацией. Вот несколько примечаний о регулярном выражении, используемом в этом примере:
- ^ — обозначает начало запрошенного URI;
- . — буквально соответствует точке;
- $ — обозначает конец запрошенного URI;
- — делает шаблон нечувствительным к регистру;
- (.*) — соответствует любому символу (или отсутствию символов);
- $1 — соответствует шаблону из круглых скобок (.*) в RewriteRule;
- — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.
Пример 2: Редирект всего домена
Чтобы осуществить редирект HTML с текущего домена на новый:
<IfModule mod_rewrite.c> RewriteRule ^/(.*) https://new-domain.tld/$1 </IfModule>
Аналогично можно перенаправить запросы из поддомена текущего сайта на поддомен на новом сайте:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} (.*).old-domain.tld
RewriteRule ^/(.*) https://%1.new-domain.tld/$1
</IfModule>
Вот несколько примечаний о регулярном выражении, используемом в этом примере:
- ^ — обозначает начало запрошенного URI;
- (.*) — соответствует любому символу (или отсутствию символов);
- $1 — соответствует шаблону из круглых скобок (.*) в RewriteRule;
- %1 — соответствует первому шаблону из круглых скобок (.*) в RewriteCond
- — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.
Обратите внимание: чтобы любой из этих методов работал корректно, оба домена должны иметь одинаковую структуру файлов. Папки и ресурсы на текущем домене также должны существовать и на новом домене
В противном случае вы получите на новом домене кучу ошибок 404.
Пример 3: Перенаправление всех файлов HTML и PHP
Вот еще один, более сложный пример скрипта редиректа HTML mod_rewrite:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/old-directory/(.*).(html|php)$
RewriteRule (.*) http://example.com/new-directory/%1.%2
</IfModule>
Мы перенаправляем все запросы к любым файлам HTML или PHP, расположенным в папке /old-directory/. Все соответствующие запросы перенаправляются в тот же файл, который находится в /new-directory/. Вот несколько примечаний о регулярном выражении, используемом в этом примере:
- ^ — обозначает начало запрошенного URI;
- (.*) — соответствует любому символу (или отсутствию символов);
- . — буквально соответствует точке;
- (html php) — соответствует либо html, либо php;
- — делает шаблон нечувствительным к регистру;
- %1 — соответствует первому шаблону из круглых скобок (. *) в RewriteCond;
- %2 — соответствует второму шаблону из круглых скобок (html|php) в RewriteCond;
- — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.