Настройка редиректа с помощью файла .htaccess

05.09.2020 Софт

Что такое файл .htaccess? Файл .htaccess – это дополнительный конфигурационный файл веб-сервера Apache. Его используют для настройки веб-сервера, а также для задания правил обработки различных URL-адресов сайта.

Для настройки 301 редиректа (переадресации) в файле .htaccess чаще всего применяют одну из трёх директив: Redirect, RedirectMatch или RewriteRule. Директивы относятся только к папке, где размещен .htaccess, а оттуда распространяются на дочерние папки.

Редирект с http на https

Если необходимо сделать 301 редирект всего сайта с https на http, в файл прописывается следующее:

RewriteEngine On  
RewriteCond %{HTTPS} off  
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]  

Редирект с https на http

В случае перехода на защищенный протокол https для всего сайта, необходимо настроить перенаправление с http на https, для этого надо добавить следующий код в файл .htaccess:

RewriteEngine on  
RewriteCond %{HTTPS} on  
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} 

Редирект с одной страницы на другую

Часта нужно сделать редирект с одной страницы сайта на другую страницу сайта. Это делается через добавления следующего кода:

Redirect 301 /test-old/ http://domain.ru/test-new/  

Редирект с www на без www (главное зеркало – домен без www)

Часто используется для склейки зеркал сайта. Так как для поисковых систем сайт с www и без www это два разных сайта, поэтому в таком случае контент обоих сайтов будет считаться дубликатом. Для избегания дублей необходимо сделать так называемую «склейку» сайта, то есть прописать 301 редирект в .htaccess.

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

Редирект с без www на www (главное зеркало – домен с www)

Тоже самое что и редирект с www на без www, но тут делается редирект наоборот.

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

Редирект со страниц со слешем на без слеша (для всего сайта)

Для избегания дублей в файле .htaccess используют следующую конструкцию:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Редирект со страниц со слешем на без слеша (весь сайт)

Обратный вариант применяется, когда нужно использовать адреса со слешем.

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

Редирект с одного домена на другой

В том случае если необходимо перейти на другой домен, при этом сохранив SEO позиции, в файл .htaccess прописывают следующее:

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

301 редирект с 404 Not Found

Код 404 Not Found (страница не найдена) присваивается удалённой или несуществующей странице на сайте, а также часто возникает при попутке неправильно ввести url-адрес. Создание постоянного перенаправления с таких страниц актуально для контентных сайтов и крупных интернет-магазинов, где страницы часто удаляются по естественным причинам. Тогда возникает потребность перенаправить посетителей на одну из главных страниц сайта, чтобы они не уходили с ресурса, при виде ошибки.

301 редирект для страниц 404 Not Found сделать совсем несложно. Например, этот код перенаправит со всех 404-страниц на главную сайта:

ErrorDocument 404 http://www.domain.com/dont_exit.html

Редирект с главной страницы site.ru/index.php на основное зеркало site.ru

В тех случаях, когда главная страница сайта может быть недоступна по нескольким адресам одновременно, применяют следующую конструкцию:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://name.site/ [R=301,L]

Редирект со страниц со слешем на без слеша (для всего сайта)

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Редирект всех страниц одного домена на главную страницу другого домена

RewriteCond %{REQUEST_URI} (.*)  
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]