301 редирект — это постоянное перенаправление пользователя и поискового бота на другой адрес, отличный от изначально запрашиваемого.
- Для чего нужен 301 редирект?
- Настройка 301 редиректов в файле .htaccess
- 301 редирект с одной страницы на другую
- Склейка основного зеркала сайта при добавлении www (Вариант 1)
- Склейка основного зеркала сайта при добавлении www (Вариант 2)
- Склейка основного зеркала сайта при удалении www
- Склейка верхнего регистра с нижним
- 301 редирект со страниц со слешем на страницы без слеша (весь сайт)
- 301 редирект со страниц без слеша на страницы со слешем (весь сайт)
- 301 редирект с http на https для всего сайта
- 301 редирект с https на http для всего сайта
- Массовая склейка. 301 редирект для index.php, index.html или index.htm
- 301 редирект с домена на домен
- 301 редирект только адреса site.com/index.php (без GET-параметров) на основное зеркало site.com
- 301 редирект для конкретного файла, а не всей папки
- Редирект со всех файлов домена, кроме папки администратора bitrix
- 301 редирект с поддомена на основной домен
- 301 редирект каждой страницы одного домена на такой же адрес другого URL
- 301 редирект всех страниц одного домена на главную страницу другого домена
- 301 редирект со страниц с пробелами в URL на главную страницу домена, пример /images/fckedit/ABEL%20TASMAN%20National%20Park.jpg
- 301 редиректы в зависимости от GET-параметра: примеры
- Пример №1
- Пример №2
- Пример №3
- Пример №4
- Пример №5
- Пример №6
- Пример №7
- Пример №8
- Пример №9
- Пример №10
- 301 редиректы кириллическими URL-адресами
- Сервисы для проверки редиректов
Для чего нужен 301 редирект?
301 редирект — эффективный способ сохранить трафик, позиции, ссылочный вес страниц сайта при:
- удалении дубликатов страниц при изменении структуры сайта или когда страница становится неактуальной;
- переезде сайта, склейке страниц, находящихся на разных доменах;
- склейке основного зеркала сайта (www, https, index.php/index.html и т. д.).
Настройка 301 редиректов в файле .htaccess
Правило: все 301 редиректы в файле .htaccess лучше размещать после этих записей:
Options +FollowSymLinks
RewriteEngine On
301 редирект с одной страницы на другую
Вариант №1
Redirect 301 /page-1/ http://site.com/page-2/
Вариант №2 с помощью регулярного выражения:
RewriteCond %{REQUEST_URI} ^/page/$
RewriteRule ^.*$ http://site.com/page-2/? [R=301,L]
Склейка основного зеркала сайта при добавлении www (Вариант 1)
RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
Склейка основного зеркала сайта при добавлении www (Вариант 2)
RewriteCond %{HTTP_HOST} ^site.com [NC]
RewriteRule ^(.*)$ http://www.site.com/$1 [L,R=301,NC]
Склейка основного зеркала сайта при удалении www
RewriteCond %{HTTP_HOST} ^www.site\.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]
Склейка верхнего регистра с нижним
RewriteCond expr «tolower(%{REQUEST_URI}) =~ /(.+)/»
RewriteRule [A-Z] %1 [R=301,L]
301 редирект со страниц со слешем на страницы без слеша (весь сайт)
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
301 редирект со страниц без слеша на страницы со слешем (весь сайт)
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
301 редирект с http на https для всего сайта
Вариант №1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вариант №2
RewriteCond %{HTTPS} =on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вариант №3
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Вариант №4
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
301 редирект с https на http для всего сайта
Вариант №1
RewriteCond %{HTTPS} «on»
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Вариант №2
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Массовая склейка. 301 редирект для index.php, index.html или index.htm
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ http://site.com/$1 [R=301,L]
301 редирект с домена на домен
RewriteCond %{HTTP_HOST} ^first-site\.com$ [NC]
RewriteRule ^(.*)$ http://www.newsite.com/$1 [R=301,L]
301 редирект только адреса site.com/index.php (без GET-параметров) на основное зеркало site.com
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.com/? [R=301,L]
301 редирект для конкретного файла, а не всей папки
Если требуется настроить редирект только для адреса http://www.site.com/files/, но при этом надо, чтобы страница http://www.site.com/files/index.php?IBLOCK_ID=16 открывалась по старому адресу, необходимо использовать символ $ в правиле.
RewriteRule ^files/$ http://www.site.com/new-folder/ [R=301,L]
Редирект со всех файлов домена, кроме папки администратора bitrix
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.site.com/folder/ [L,R=301]
301 редирект с поддомена на основной домен
Вариант №1
RewriteCond %{HTTP_HOST} ^poddomen.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com%{REQUEST_URI} [R=301,NC,L,QSA]
Вариант №2
RewriteEngine on
RewriteCond %{HTTP_HOST} ^ht.site-name.com.ua$
RewriteRule ^/?$ «https\:\/\/site-name.com.ua\/» [R=301,L]
301 редирект каждой страницы одного домена на такой же адрес другого URL
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]
301 редирект всех страниц одного домена на главную страницу другого домена
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.com/ [L,R=301]
301 редирект со страниц с пробелами в URL на главную страницу домена, пример /images/fckedit/ABEL%20TASMAN%20National%20Park.jpg
Redirect 301 «/images/fckedit/ABEL TASMAN National Park.jpg» /
301 редиректы в зависимости от GET-параметра: примеры
Пример №1
site.com/page.html?ref=text → site.com/page.html
RewriteCond %{QUERY_STRING} ^ref=text$
RewriteRule ^(.*)$ /$1? [R=301,L]
Пример №2
site.com/page?file=text&doc=next → site.com/page?doc=next
RewriteCond %{QUERY_STRING} file=text&doc=(.*)
RewriteRule ^(.*)$ /$1?doc=%1 [L]
Пример №3
site.com/component/content/?information=file → на главную страницу site.com
RewriteCond %{QUERY_STRING} ^information=file $ [NC]
RewriteRule ^component/content/$ /? [R=301,L]
Пример №4
С site.com/index.php?idc=4&marea=6 → на главную страницу site.com
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
RewriteRule ^index\.php$ /? [R=301,L]
Пример №5
С site.com/index.php?route=feed/latest_products_rss¤cy=GRN → на главную страницу site.com
RewriteCond %{QUERY_STRING} ^route=
RewriteRule ^.*$ http://site.com/? [R=301,L]
Пример №6
С site.com/information/information?information_id=64 → на главную страницу site.com
RewriteCond %{QUERY_STRING} information_id=64$
RewriteRule ^information/information$ /? [L,R=301]
Пример №7
Регулярка со всех GET параметров главной страницы, на главную без параметров
RewriteCond %{THE_REQUEST} » /\?»
RewriteRule ^ /? [R=301,L]
Пример №8
Регулярка с GET-параметром на главную (http://site.com/ru/news/id=16)
RewriteRule ^ru/news(/.*)?$ / [L,R=301,NC]
Пример №9
Регулярка с GET-параметром на главную:
http://site.com.ua/bukovel/?_utl_t=vb
http://site.com.ua/ru/bukovel/?_utl_t=vb
http://site.com.ua/en/bukovel/?_utl_t=vb
RewriteCond %{QUERY_STRING} ^_utl_t= [NC]
RewriteRule (.) $1? [R=301,L]
RewriteRule ^en(/.)?$ / [L,R=301,NC]
RewriteRule ^ru(/.*)?$ / [L,R=301,NC]
Пример №10
Регулярка с GET-параметром на главную
http://site.com.ua/index.php/2013-04-22-17-34-15/2013-04-23-10-31-15/9-uncategorised/144-%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D1%80%D0%B5%D0%B9%D1%81%D0%BE%D0%B2-%D0%B0%D0%BB%D0%BC%D0%B0%D1%82%D1%8B-%D0%B1%D1%83%D1%80%D0%B3%D0%B0%D1%81-%D0%B1%D0%BE%D0%BB%D0%B3%D0%B0%D1%80%D0%B8%D1%8F-%D0%B0%D0%BB%D0%BC%D0%B0%D1%82%D1%8B-2013.html
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ https://site.com.ua/? [R=301,L]
301 редиректы кириллическими URL-адресами
1. Преобразование кириллических символов в Punycode. Пример сервиса, который может решить эту задачу: https://hb.by/punycode-converter.aspx.
2. Если не работает через Punycode, то можно сделать регулярным выражением, например:
RewriteRule ^услуги/оценка-недвижимости/оценка-квартиры/$ https://site.com/ocenka-kvartiri [R=301,L]
Надо добавлять в начало .htaccess и сохранять файл в кодировке UTF-8 без BOM.
3. Еще один вариант — поместить кириллические URL-адреса в кавычки:
Redirect 301 “оценка/жилой-недвижимости” http://site.com/
Сервисы для проверки редиректов
Одна из главных ошибок —проверка настроенных редиректов в браузере, когда может подтягиваться кэш, из-за которого изменения не вступают в силу. Лучше использовать специальные сервисы, их довольно много. Введите в поисковик запрос “проверка редиректов онлайн” и перейдите на первые сайты, например:
- https://www.ukraine.com.ua/info/tools/redirect/
- https://4web.su/s_redirect/
- https://www.websiteplanet.com/uk/webtools/redirected/
Важно: если что-то не сработало, лучше проверить с помощью нескольких сервисов. Бывают случаи, когда какой-то из сервисов сразу не отдает правильный результат.
Если у вас возникли проблемы с редиректами, внимательно прочитайте статью еще раз 🙂 Или оставляйте комментарий, а мы постараемся помочь вам в этом.