В статье приведены примеры стандартных перенаправлений, которые могут быть настроены с помощью файла .htaccess
вашего сайта.
Указанные перенаправления будут работать:
Обратите внимание, что данные редиректы не подойдут для OS Bitrix7.
Файл .htaccess
позволяет вам настраивать конфигурацию веб-сервера Apache для конкретного сайта, не затрагивая настройки основных конфигурационных файлов Apache (httpd.conf
в CentOS и apache2.conf
в Ubuntu/Debian) и не рискуя что-то необратимо сломать на сервере. Директивы, указанные в .htaccess
будут действовать только для каталога, в котором размещается этот файл, и его подкаталогов.
Для подкаталогов также можно создавать дополнительные .htaccess
-файлы; при этом они переопределят настройки, назначенные в .htaccess
на уровне выше.
В .htaccess
можно:
Файл необходимо создать в каталоге сайта (обычно это /var/www/html
, но у вас путь может отличаться — в этом случае замените его в командах) с помощью подключения по SSH или FTP.
При подключении по SSH это можно сделать так:
touch /var/www/html/.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
не будет работать.
Если ваш сайт размещен по другому пути (не /var/www/.../
), исправьте путь на верный или добавьте еще один блок <Directory>
с нужным путем.
Меняем значение на Allow Override All
:
Сохраняем изменения (Ctrl + X, затем Y, затем Enter).
И перезагружаем веб-сервер:
systemctl restart apache2
Теперь мы можем прописывать директивы для сайта в файле .htaccess
.
Во-первых, убедитесь, что у вас включен модуль mod_rewrite
. Для этого выполните команду:
apache2ctl -M | grep rewrite
В выводе должно быть rewrite_module (shared)
:
Если вывод отличается — включите 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>
В примере ниже выполняется редирект с 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]
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]
RewriteBase /
RewriteCond %{HTTPS} on [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Вариант 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]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
В примерах осуществляется редирект с 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.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]
пригодилась информация - спасибо!