Бесплатная миграция IT-инфраструктуры в облако
На главную
61c46507-12c7-4300-a301-bd8bc30c7c19
Инструкции для серверов

Настройка перенаправлений

В статье приведены примеры стандартных перенаправлений, которые могут быть настроены с помощью файла .htaccess вашего сайта.

Указанные перенаправления будут работать:

  • для большинства конфигураций VDS, где используется веб-сервер Apache (необходимо, чтобы был включен модуль mod_rewrite);
  • для серверов с VestaCP или ispmanager, установленными через панель управления аккаунтом. В ispmanager простые перенаправления могут также быть настроены средствами панели.

Обратите внимание, что данные редиректы не подойдут для OS Bitrix7.

Что такое .htaccess?

Файл .htaccess позволяет вам настраивать конфигурацию веб-сервера Apache для конкретного сайта, не затрагивая настройки основных конфигурационных файлов Apache (httpd.conf в CentOS и apache2.conf в Ubuntu/Debian) и не рискуя что-то необратимо сломать на сервере. Директивы, указанные в .htaccess будут действовать только для каталога, в котором размещается этот файл, и его подкаталогов. 

Для подкаталогов также можно создавать дополнительные .htaccess-файлы; при этом они переопределят настройки, назначенные в .htaccess на уровне выше.

В .htaccess можно:

  • Настраивать перенаправления с одного адреса на другой;
  • Управлять настройками PHP;
  • Задавать собственные страницы ошибок;
  • Устанавливать права доступа к файлам;
  • — и многое другое.

Как создать .htaccess?

Файл необходимо создать в каталоге сайта (обычно это /var/www/html, но у вас путь может отличаться — в этом случае замените его в командах) с помощью подключения по SSH или FTP. 

При подключении по SSH это можно сделать так:

touch /var/www/html/.htaccess

Как «включить» .htaccess?

Чтобы веб-сервер Apache читал и применял настройки из файла .htaccess, в главном конфигурационном сайте Apache — httpd.conf или apache2.conf — должна быть прописана директива Allow Override All для нужной нам директории. 

Рассмотрим на примере сервера с LAMP с системой Ubuntu 20.04.

Откроем файл конфигурации apache2.conf:

nano /etc/apache2/apache2.conf

Стандартно сайт размещается в директории /var/www/html/. Видим, что Allow Override для нее имеет значение None — значит, .htaccess не будет работать.

5cf7458e 8ad6 47e4 9236 B4792686e8f0

Если ваш сайт размещен по другому пути (не /var/www/.../), исправьте путь на верный или добавьте еще один блок <Directory> с нужным путем.

Меняем значение на Allow Override All:

A7f3c1e5 394e 42e7 Aafc E8df8cd7a6a3

Сохраняем изменения (Ctrl + X, затем Y, затем Enter).

И перезагружаем веб-сервер:

systemctl restart apache2

Теперь мы можем прописывать директивы для сайта в файле .htaccess.

Как проверить, что mod_rewrite включен?

Во-первых, убедитесь, что у вас включен модуль mod_rewrite. Для этого выполните команду:

apache2ctl -M | grep rewrite

В выводе должно быть rewrite_module (shared):

Powershell Gt D Ja T Xgn B

Если вывод отличается — включите mod_rewrite командой:

sudo a2enmod rewrite

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

Директивы перенаправлений необходимо указывать в блоке <IfModule mod_rewrite.c> со следующим содержимым:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
#Ваши правила
</IfModule>

В качестве правил указываются директивы RewriteCond и RewriteRule с необходимыми значениями — RewriteCond задает условие, при котором происходит выполнение правила, указанного в RewriteRule.

Например, так мы настроим перенаправление с HTTP на HTTPS для сайта mydomain.com:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^mydomain.com$
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]
</IfModule>

Powershell J5 Vf Uji Bjw

Настройка перенаправлений

Перенаправление на другой домен

В примере ниже выполняется редирект с www.old-domain.ru на www.new-domain.ru:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.ru$
RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L]

Перенаправление c http на https

1. Перенаправление с http://example.ru на https://example.ru.

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

1a. Для серверов с панелью VestaCP:

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

1b. Для серверов с панелью ispmanager при использовании Nginx:

RewriteBase / 
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

2. Перенаправление с http://example.ru на https://www.example.ru.

RewriteBase / 
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^example.ru$
RewriteRule ^(.*)$ https://www.example.ru/$1 [R=301,L]

3. Перенаправление с http://www.forum.example.ru на https://forum.example.ru.

RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC] 
RewriteRule ^(.*)$ https://forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

4. Перенаправление с http://forum.example.ru на https://www.forum.example.ru.

RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC] 
RewriteRule ^(.*)$ https://www.forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление с https на http

RewriteBase / 
RewriteCond %{HTTPS} on [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление на http для одной страницы

Вариант 1:

RewriteBase / 
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Вариант 2:

RewriteBase / 
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Пример: отключение перенаправления на https для страницы bitrix/admin/1c_exchange.php для корректной работы обмена данных с 1C:

RewriteBase / 
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/bitrix/admin/1c_exchange\.php$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Оно же для панели VestaCP:

RewriteCond %{SERVER_PORT} !^443$ 
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} ^/bitrix/admin/1c_exchange\.php$
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Перенаправление на https для одной страницы

RewriteBase / 
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление домена без www на домен с www

В примерах осуществляется редирект с forum.example.ru на www.forum.example.ru.

Способ 1:

RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC] 
RewriteRule ^(.*)$ http://www.forum.example.ru/$1 [R=301,L]

Способ 2, без указания домена:

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

Перенаправление домена с www на домен без www

В примерах осуществляется перенаправление с www.forum.example.ru на forum.example.ru.

Способ 1:

RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC] 
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]

Способ 2.

RewriteCond %{HTTP_HOST} !^forum\.example\.ru$ [NC] 
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]

Перенаправление в подкаталог

Перенаправление поддомена forum.example.ru в подкаталог forum: 

RewriteBase / 
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$
RewriteCond %{REQUEST_URI} !/forum/ RewriteRule ^(.*)$ /forum/$1 [L]
Была ли статья полезна?
Ваша оценка очень важна
Комментарии 1
Дмитрий
11.10.2024, 12:00

пригодилась информация - спасибо!