Перенаправления (редиректы) используются в тех случаях, когда вам необходимо, чтобы перенаправить пользователи сайта на нужный адрес.
В данной статье расскажем, как настраивать перенаправления в Apache и Nginx — одних из самых популярных веб-серверов в мире.
- Apache
- Подключения модуля mod_rewrite
- Правила Redirect
- Redirect или RedirectPermanent
- RedirectMatch
- RewriteRule
- Редирект с одного сайта на другой
- Редирект с www на без www
- Редирект с без www на www
- Перенаправление домена с https на http
- Перенаправление домена с http на https
- Nginx
- Редирект 301 с www.domain.com на domain.com
- Редирект 301 с domain.com на www.domain.com
- Редирект 301 с https на http
- Редирект 301 с http на https
Apache
Подключения модуля mod_rewrite
Для включения перенаправления средствами Apache достаточно, чтобы модуль mod_rewrite.so был загружен в Apache.
Для ОС Ubuntu, Debian:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
Для ОС CentOS, RedHat, AlmaLinux нужно проверить, чтобы в файле /etc/httpd/conf.modules.d/00-base.conf
была строка:
LoadModule rewrite_module modules/mod_rewrite.so
Если ее нет, то нужно добавить ее в конец файла. Если она закомментирована (в начале строки знак #
) — нужно раскомментировать строку.
Для того чтобы директивы mod_rewrite можно было использовать в
.htaccess, надо в конфигурационном файле Apache, в соответствующем
разделе <Directory /путь/до/директории>
прописать:
AllowOverride all
После внесения изменений в конфигурационный файл Apache, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Для ОС Ubuntu, Debian:
systemctl restart apache2
Для ОС CentOS, RedHat, AlmaLinux:
systemctl restart httpd
В .htaccess для работы перенаправления нужно указать следующую директиву:
RewriteEngine On
Правила Redirect
Эти директивы вы можете прописывать как в конфиге Apache для нужного virtualhost, так и в файле .htaccess.
Redirect или RedirectPermanent
Главный недостаток данных правил заключается в том, что для каждого адреса необходимо прописывать новое правило. Если необходимо сделать несколько редиректов, то каждый новый редирект пишется с новой строки.
Redirect 301 /old-page.html http://new-domain.ru/new-page.html
или
Redirect permanent /old-page.html http://new-domain.ru/new-page.html
Для перенаправления всех запросов на другой сайт вы можете использовать следующую конструкцию:
Redirect 301 / http://new-domain.ru/
или
Redirect permanent / http://new-domain.ru/
RedirectMatch
Этот редирект отличается тем, что в нем можно использовать регулярное выражение. Например, при переносе сайта с Windows на Linux, необходимо сменить все ссылки с *.php на *.aspx:
RedirectMatch /(.*)\.aspx$ /$1.php
RewriteRule
Для работы данного модуля убедитесь в том, что включена опция FollowSymLinks, эту функцию нужно прописать в конфигурационном файле Apache или в файле .htaccess как указано ниже.
Рассмотрим самые распространённые варианты её использования.
Редирект с одного сайта на другой
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.oldsite\.ru [OR] RewriteCond %{HTTP_HOST} ^oldsite\.ru RewriteRule (.*) https://newsite.ru [R=301,L]
Редирект с www на без www
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Или более понятный синтаксис:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.domain\.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Вы можете использовать любой.
Редирект с без www на www
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Альтернатива:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Перенаправление домена с https на http
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx.
RewriteEngine On RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Перенаправление домена с http на https
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx
RewriteEngine On RewriteCond %{SERVER_PORT} ^80$ [OR] RewriteCond %{HTTP} =on RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]
Nginx
Модуль ngx_http_rewrite_module, необходимый для настройки перенаправлений, устанавливается автоматически вместе с Nginx.
Рекомендуется добавлять правила редиректа по одному, т.к. можно получить ошибку, либо циклическое перенаправление. Поэтому после каждого изменения конфигурационного файла нужно проверять его корректность командой:
nginx -t
Редирект 301 с www.domain.com на domain.com
Для Nginx вам нужно создать две секции server в конфигурационном файле, одну для домена с www, вторую для домена без www:
Секция server
для редиректа:
server { listen 80; server_name www.domain.com; return 301 $scheme://domain.com$request_uri; }
Секция server
, где находятся основные настройки домена:
server { listen 80; server_name domain.com; ..... }
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
nginx -s reload
или
systemctl reload nginx
Редирект 301 с domain.com на www.domain.com
Для Nginx вам нужно создать две секции server в конфигурационном файле, одну для домена с www, вторую для домена без www:
Секция server
для редиректа:
server { listen 80; server_name domain.ru; return 301 http://www.$host$request_uri; }
Секция server
, где находятся основные настройки домена.
server { listen 80; server_name www.domain.com; ..... }
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
nginx -s reload
или
systemctl reload nginx
Редирект 301 с https на http
Для Nginx вам нужно создать две секции server
в конфигурационном файле, одну для https (443 порт), вторую для http (80 порт).
Секция server
для открытия по https (443 порт) и настройки редиректа:
server { listen 443; server_name domain.ru www.domain.ru; return 301 http://$host$request_uri; }
Секция server
для открытия по http (80 порт), где находятся основные настройки домена.
server { listen 80; server_name www.domain.com; ..... }
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
nginx -s reload
или
systemctl reload nginx
Редирект 301 с http на https
Для Nginx вам нужно создать две секции server
в конфигурационном файле, одну для http (80 порт), вторую для https (443 порт).
Для нового домена в конф. файле nginx
Секция server
для открытия по http (80 порт) и настройки перенаправления:
server { listen 80; server_name domain.com www.domain.com; return 301 https://$host$request_uri; }
Секция server для открытия по https (443 порт), где находятся основные настройки домена.
server { listen IP.се.рве.ра:443; server_name www.domain.com; ..... }
Для существующего домена в конф. файле nginx
Если вы вносите изменения в существующую секцию конф. файла nginx делайте это так:
из основной секции домена удалите строку вида
listen IP.се.рве.ра:80;
и создайте новую секцию server такого вида:
server { listen 80; server_name domain.com www.domain.com; return 301 https://$host$request_uri; }
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно его перезапустить так:
nginx -s reload
или
systemctl reload nginx