Редирект с одного домена на другой в Apache
Будем редиректить так, чтобы не терялись все пути и куеристринги.
Если же в вашем случае надо редиректить вообще всё, что своим DNSом смотрит на ваш сервер, то можно сделать ещё проще. Как вы знаете, в Апаче существует дефолтный виртуал хост. Тот Virtual Host, который встречается первым — и есть дефолтный. Именно он будет использоваться по умолчанию, если никакое другое правило не подошло.
Предполагаем, что вы конечно же основные виртуал хосты прописали как надо. Поэтому теперь вы имеете право дописать в дефолтный VirtualHost вот что:
Редиректы работают, никаких лишних двойных слешей, весь путь и куеристринги сохраняются.
Похожие статьи от Димы
Обсуждение
Хорошо когда данные не теряются если перебрасываешь с одного домена на другой,а вообще это бесплатно и легально или могут быть потом проблемы. Например не будет потом выдавать, что неправильный хост??
Здравствуйте, Александр.
Проблемы потом действительно могут быть — в случае если не понимаете до конца, что делаете.
Здесь мы делаем простой 301 «вечный» редирект. Да, это бесплатно и легально. Как говорится, без смс )
Кто и что будет потом выдавать, что неправильный хост? Не уверен, что понял вопрос.
Если говорить про поисковый вес, то он, с небольшими потерями, будет перенесён на новую ссылку. Это единственный и правильный способ сменить домен: настроить на старом домене правильные 301 редиректы на новый домен, с сохранением функциональности всех страниц/ссылок.
Настройка временного и постоянного перенаправления Apache и Nginx
Что такое HTTP-перенаправление?
HTTP-перенаправление (или URL редирект) – это техника переадресации одного домена или адреса на другой. Существует множество вариантов применения перенаправления.
Пользователи, которые создают контент и администрируют серверы, часто сталкиваются с необходимостью перенаправлять трафик из одной точки в другую. Данное руководство рассматривает различные случаи использования этих техник, а также демонстрирует способы их применения.
Зачем серверу перенаправление?
Редирект используется всякий раз, когда сайту необходимо, чтобы пользователи, создающие запросы, были направлены на другой адрес. Существует множество ситуаций, в которых редирект крайне необходим.
Перемещение на другой домен
К примеру, вы запустили сайт, а теперь хотели бы изменить свой домен; в такой ситуации не следует просто отказываться от старого домена, лучше прибегнуть к использованию перенаправления.
В противном случае все закладки и ссылки на ваш сайт, расположенные на других страницах сети Интернет, перестанут работать, поскольку контент исчез без каких-либо указаний, как браузеру искать его новое местонахождение.
Изменение домена без перенаправления не только приведёт к потере трафика от предыдущих посетителей, но и может серьёзно повлиять на доверие к сайту.
Расширение на похожие домены
Часто владельцы сайтов регистрируют несколько вариаций доменного имени, чтобы выиграть на запросах адресов, похожих на основной домен.
К примеру, если у вас есть домен supersite.com, вы могли бы также приобрести домены вроде supersite.net и supersite.org, а затем просто перенаправить оба похожих домена на основной.
Это позволяет получить пользователей, которые пытаются попасть на ваш сайт по неправильному адресу. Также это исключает вероятность того, что другой сайт будет использовать похожий домен и таким образом отнимет у вас трафик.
Изменение имени страницы
Иногда возникает необходимость изменять имена ранее опубликованных страниц сайта, на которые уже идёт трафик. Как правило, это приводит к 404 Not Found (или другой ошибке, в зависимости от настроек безопасности сервера). Но этого можно избежать, перенаправив пользователей на другую страницу, которая содержит искомый контент.
Форсирование SSL-соединений
Простой и достаточно распространённый способ перенаправления – это направление всего трафика на использование SSL вместо стандартного HTTP.
Таким образом можно перенаправить все запросы с http://www.mysite.com на адрес https://www.mysite.com и тем самым повысить безопасность соединений.
Методы перенаправления
Существует несколько различных методов перенаправления URL-адресов, каждый из которых означает какое-то изменение для браузера клиента.
Самыми распространёнными являются временные перенаправления 302 и постоянные перенаправления 301.
Временный редирект
Временный редирект (англ. Temporary redirect) необходим в том случае, если контент определённого URL-адреса должен временно обслуживаться в другой точке.
К примеру, его можно использовать, чтобы перенаправить все страницы домена к странице, которая сообщит посетителям сайта, что сайт временно недоступен и вернётся в сеть в ближайшее время.
Временный редирект сообщает браузеру, что контент временно находится в другой точке сети, но со временем вернётся к исходному URL-адресу.
Постоянный редирект
Постоянный редирект (англ. Permanent redirect) полезен в случае, если контент был перемещён в другое место навсегда.
К примеру, он необходим при изменении доменного имени или URL-адреса, так как старый адрес не будет поддерживаться.
Этот редирект сообщает браузеру, что он более не должен обращаться к старому URL-адресу, но должен обновить свои данные и всегда обращаться к новому адресу.
Перенаправление Apache
Для перенаправления трафика Apache использует несколько инструментов. Самый простой из них – это модуль mod_alias. Существует также более сложный модуль mod_rewrite, позволяющий настраивать более обширные редиректы.
Директива Redirect
Apache позволяет выполнять простые редиректы для одной страницы при помощи директивы Redirect, которая входит в модуль mod_alias. Эта директива требует как минимум два аргумента – это старый и новый URL-адреса.
Простейшая форма применения этой директивы в конфигурациях сервера выглядит так:
Этот редирект направляет все запросы к www.domain1.com на домен www.domain2.com. Директива Redirect может использоваться только для перенаправления одной страницы, а не всего сайта.
По умолчанию Redirect устанавливает временный редирект (или 302).
Использовать Redirect для постоянного редиректа можно двумя способами:
Redirect 301 /oldlocation http://www.domain2.com/newlocation
Redirect permanent /oldlocation http://www.domain2.com/newlocation
Директива RedirectMatch
Чтобы создать перенаправление для нескольких страниц (или для всего сайта), используйте директиву RedirectMatch, которая позволяет задать каталог с шаблонами при помощи регулярных выражений. Таким образом можно перенаправлять не только отдельные файлы но и целые каталоги.
RedirectMatch ищет соответствия шаблонам в скобках, а затем ссылается на найденный текст при помощи”$1″, где 1 – это первая группа любых символов, заданных ранее при помощи (.*). Следующие группы символов нумеруются последовательно.
К примеру, чтобы перенаправлять каждый запрос к каталогу /images на поддомен images.example.com, можно использовать:
RedirectMatch ^/images/(.*)$ http://images.example.com/$1
Как и при использовании директивы Redirect, можно указать тип редиректа, указав соответствующий код перед правилами URL-а.
Использование mod_rewrite
Наиболее гибким и наиболее сложным инструментом для перенаправления является модуль mod_rewrite.
К сожалению, описание этого инструмента настолько обширно, что его невозможно охватить в данной статье. Подробную информацию о модуле mod_rewrite можно найти в этом руководстве.
Перенаправление Nginx
Перенаправление на сервере Nginx гораздо проще. В большинстве случаев для перенаправления контента можно создать блок server.
Например, чтобы перенаправить запросы с domain1.com на domain2.com, можно создать следующий блок:
Директива return выполняет подстановку URL-адреса, а затем возвращает заданный код статуса и указанный URL.
В данном случае директива обращается к переменной “$scheme” для использования любой схемы, заданной в исходном запросе (HTTP или HTTPS). Затем она возвращает код постоянного редиректа 301 и новый URL-адрес.
Для обработки перенаправления каталога на отдельный поддомен можно использовать директиву rewrite, аналогичную перенаправлению каталогов на сервере Apache:
rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
Данная директива, расположенная в блоке server, создаст временный редирект запросов к каталогу images на поддомен images.example.com.
Для постоянного редиректа замените redirect в конце строки на permanent.
Итоги
Убедитесь, что выбрали правильный тип перенаправления, так как неправильное использование временных редиректов может отрицательно повлиять на рейтинти поисковиков.
Разумное использование перенаправления позволит вам изменять структуру сайта по мере необходимости и тем самым сделать свой сайт гораздо продуктивнее. Более подробную информацию о перенаправлении Apache и Nginx можно найти в официальной документации этих серверов.
Apache редирект на другой сервер
Apache: варианты перенаправления ссылок
Нередко возникает потребность в перенаправлении ссылок сайт внутри домена, или за его пределы. Ниже предоставлены самые распространённые задачи и их решения.
Пример: Сайт доступен по адресу domain.com и по адресу www.domain.com. С точки зрения поисковиков – это два разных адреса, где один адрес является зеркалом другого. Технически на этих адресах могут располагать два разных сайта. И в определённой ситуации поисковик может посчитать контент сайта неуникальным, так как он доступен по двум адресам. Многие вебмастера предпочитают перенаправлять все внутренние ссылки сайта на один адрес.
Для решения этих задач на стороне Apache должен быть включен Mod Rewrite, а PHP должен работать как модуль Apache.
Строка «RewriteEngine on» включает Mod Rewrite для вашего сайта, в случае если Mod Rewrite на стороне Apache включен, но для вашего домена выключен. Её наличие так же не мешает, если Mod Rewrite для вашего домена уже включен.
Перенаправление главной страницы сайта.
Пример: На сайте в домене domain.com главной страницей является /index.php и доступна она как по адресу domain.com, так и по domain.com/index.php. Нужно оставить только первый вариант.
Перенаправление другой отдельно взятой страницы.
Пример: Страница была перенесена. Раньше материал находился по адресу domain.com/article.html, сейчас она находится по адресу domain.com/folder/article.html. Необходимо перенаправить запросы со старого адреса на новый.
Перенаправление всех запросов с одного домена на другой.
Пример: Раньше сайт находился по адресу domain.com, сейчас он находится по адресу domain.net. Необходимо перенаправить все запросы на новый домен.
Сам файл размещаем в корневую папку домена domain.com.
Перенаправление определённых каталогов сайта на другой адрес.
Пример: сайт доступен по двум адресам: domain.com и domain.net. Нужно чтобы раздел /folder был доступен по адресу domain.com/folder, а раздел /folder2 по адресу domain.net/folder2.
Решение: Домены не должны быть припаркованы друг к другу на стороне регистратора. Один домен не должен быть алиасом другого на стороне Apache. В конфигурационном файле виртуальных хостов должны быть отдельные записи для обоих доменов. DocumentRoot (так же, как и блок Directory) у обоих доменов должны быть идентичны. (Как правило, конфигурационные файлы виртуальных хостов лежат в каталоге /etc/apache2/sites-available). То есть оба они смотрят в одну и ту же папку, где и располагается сам сайт. Предположим, что запись виртуального хоста для domain.com выглядит так:
Добавляем в неё редирект, после чего запись выглядит следующим образом:
Для домена domain.net нужно сделать то же самое, но со следующим редиректом:
Ограничение доступа к определённом каталогу по IP адресу.
Пример: На сайте есть каталог (например, domain.com/admin), доступ к которому необходимо ограничить и разрешить доступ только с двух IP адресов.
Таким образом с двух вышеуказанных адресов доступ будет открыт, а остальным закрыт.
Если необходимо закрыть доступ к определённому файлу (например, к domain.com/admin.php), то пишем то же самое, указав путь к файлу.
Перенаправление Apache и Nginx
Статья давно не обновлялась, поэтому информация могла устареть.
Содержание
Apache
Подключения модуля mod_rewrite
Для включения перенаправления средствами Apache, достаточно чтобы модуль mod_rewrite.so был загружен в Apache.
После внесения изменений в конфигурационный файл Apache, для вступления в силу этих изменений, нужно перезапустить веб сервер:
Правила Redirect
Redirect или RedirectPermanent
Главный недостаток данных правил заключается в том, что для каждого адреса необходимо прописывать новое правило. Если необходимо сделать несколько редиректов, то каждый новый редирект пишется с новой строки.
Если нужно сделать несколько редиректов, то каждый новый редирект нужно написать с новой строки.
Для перенаправления всех запросов на другой сайт вы можете использовать следующую конструкцию:
RedirectMatch
Этот редирект отличается тем, что в нем можно использовать регулярное выражение. Например, при переносе сайта с Windows на Linux, необходимо сменить все ссылки с *.php на *.aspx:
RewriteRule
Для работы данного модуля убедитесь в том, что включена опция FollowSymLinks, эту функцию нужно прописать в конфигурационном файле Apache или в файле .htaccess как указано ниже.
Рассмотрим самые распространённые варианты её использования.
Редирект с одного сайта на другой
Редирект с www на без www
Или более понятный синтаксис
Вы можете использовать любой.
Редирект с без www на www
Перенаправление домена с https на http
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx
Перенаправление домена с http на https
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx
Nginx
Модуль ngx_http_rewrite_module, необходимый для настройки перенаправлений, он устанавливается автоматически вместе с Nginx.
Редирект 301 с www.domain.com на domain.com
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена с www, вторая для домена без www:
Секция server для редиректа:
Секция server, где находятся основные настройки домена:
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с domain.com на www.domain.com
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена без www, вторая для домена с www.
Секция server для редиректа:
Секция server, где находятся основные настройки домена.
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с https на http
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для https(443 порт), вторая для http(80 порт).
Секция server для открытия по https(443 порт) и настройки редиректа:
Секция server, для открытия по http(80 порт), где находятся основные настройки домена.
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с http на https
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для http(80 порт), вторая для https(443 порт).
Для нового домена в конф. файле nginx
Секция server, для открытия по http(80 порт) и настройки перенаправления:
Секция server, для открытия по https(443 порт), где находятся основные настройки домена.
Для существующего домена в конф. файле nginx
Если вы вносите изменения в существующую секцию конф. файла nginx делайте это так: Из основной секции домена удалите строку вида
И создайте новую секцию server такого вида:
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно его перезапустить так:
Настройка временного и постоянного редиректа в Apache
HTTP-перенаправление (или редирект) – это способ направить один домен или адрес на другой. Существует несколько видов перенаправления, каждый из которых по-разному воспринимается клиентским браузером. Самые распространённые виды – это временный и постоянный редирект.
Временный редирект используется в случае если контент, доступный по одному URL-адресу, нужно временно обслуживать из другого каталога. К примеру, если сайт находится на обслуживании, вы можете перенаправить запросы к домену на пользовательскую страницу ошибок, где посетители смогут узнать, когда сайт будет доступен.
Постоянный редирект сообщает браузеру о том, что старый адрес больше не доступен, а контент обслуживается по другой ссылке. Такой редирект полезен при смене доменного имени.
Чтобы создать временный редирект в Apache, добавьте в виртуальный хост такую строку:
Redirect /oldlocation http://www.newdomain.com/newlocation
Чтобы настроить постоянный редирект, добавьте в файл виртуального хоста:
Redirect permanent /oldlocation http://www.newdomain.com/newlocation
В руководстве вы найдёте более подробное описание настройки каждого вида перенаправления и несколько полезных примеров.
Требования
Простая настройка редиректа
Чтобы настроить простой редирект одной страницы в Apache, можно использовать директиву Redirect, которая входит в модуль mod_alias. Модуль включен в Apache по умолчанию. Директиве нужно иметь минимум два аргумента: старый URL-адрес и новый URL-адрес. С её помощью можно настроить как временное, так и постоянное перенаправление.
Чтобы настроить простое временное перенаправление, добавьте следующие строки в конфигурации сервера:
Теперь браузер будет направлять все запросы к www.domain1.com на домен www.domain2.com. Однако такое решение работает только с одностраничными сайтами.
Редирект объемных сайтов настраивается иначе. Для этого используется директива RedirectMatch, которая с помощью регулярных выражений может указывать целый каталог вместо одного файла.
К примеру, чтобы временно перенаправить все страницы домена www.domain1.com на www.domain2.com, нужно добавить в файл:
По умолчанию директивы Redirect и RedirectMatch устанавливают временный редирект. Чтобы с их помощью настроить постоянный редирект, нужно добавить в настройки опцию permanent:
Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1
Более гибкую настройку редиректа предоставляет модуль mod_rewrite, но его использование выходит за рамки данного руководства.
Пример 1: переход на другой домен
Предположим, у вас есть сайт, который пользуется популярностью, но в какой-то момент у вас возникла необходимость сменить его домен. Конечно, вы не можете просто переместить контент на новый домен, а старый забросить: так вы потеряете своих посетителей. Кроме того, ссылки на ваш сайт, расположенные на других сайтах, перестанут работать, если вы просто перенесёте контент на новый домен и не оставите никакой информации о его новом местонахождении. Все это приведёт к снижению трафика. Как переместить контент сайта на новый домен и не потерять аудиторию?
В таком случае нужно настроить редирект со старого домена (например, domain1.com) на новый (domain2.com). Чтобы навсегда сменить доменное имя сайта, используйте постоянный редирект. Благодаря этому браузер сможет перенаправлять поступающий трафик на новый домен.
Итак, предположим, что на данный момент сайт обслуживается по домену domain1.com, а его виртуальный хост находится в /etc/apache2/sites-available/domain1.com.conf:
Виртуальный хост для нового домена сайта, /etc/apache2/sites-available/domain2.com.conf, должен выглядеть так:
Теперь измените настройки виртуального хоста domain1.com и добавьте в них постоянный редирект на domain2.com:
В данном случае используется директива RedirectMatch, а не Redirect, поскольку сайт состоит из нескольких страниц. Регулярное выражение ^/(.*)$ совпадает с любым текстом, идущим в URL-адресе после /. Таким образом, http://domain1.com/index.html будет перенаправляться на http://domain2.com/index.html.
Чтобы настроить постоянный редирект, нужно просто добавить опцию permanent в директиву RedirectMatch.
Примечание: После изменения виртуального хоста нужно перезапустить Apache, чтобы обновить настройки:
systemctl restart apache2
Пример 2: перенаправление страницы
В некоторых ситуациях возникает необходимость изменить название уже опубликованной страницы. Если вы просто измените название (без настройки редиректа), при запросе исходного URL-адреса страницы будет возникать ошибка 404 Not Found. Тогда пользователь, который добавил эту страницу в закладки, не сможет найти её, поскольку он использует устаревшую ссылку. Редирект позволяет устранить эту проблему.
Предположим, на вашем сайте есть две отдельные страницы для товаров и услуг, products.html и services.html соответственно, и вы решили объединить эти страницы в одну, offers.html. Чтобы не потерять трафик, нужно настроить редирект products.html и services.html на offers.html.
К примеру, исходный виртуальный хост сайта выглядит так:
Чтобы перенаправить эти две страницы на новую страницу, достаточно добавить в файл две директивы Redirect:
Директива Redirect принимает исходный адрес страницы, которую нужно перенаправить, а затем адрес новой страницы. Опция permanent обеспечит постоянный редирект. Вы можете использовать неограниченное количество директив Redirect в виртуальном хосте, чтобы перенаправить трафик на новые страницы сайта.
Заключение
Теперь вы умеете перенаправлять запросы пользователей. При настройке перенаправления будьте внимательны: неправильное использование временных редиректов может повредить ваш поисковый рейтинг.
Редирект HTTP применяется также для обеспечения SSL-шифрования трафика (редирект http на https) и добавления префикса www к домену сайта.
