Разное

301 редирект с параметрами: Редирект 301 url с параметрами — Про SEO

Содержание

30+ примеров настройки 301 редиректа в .htaccess


Популярные примеры правильной настройки 301 редиректа в файле .htaccess. Советы по добавлению редиректов.

Полезные советы

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
  • При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.

Наиболее популярные правила


Приведенные примеры работают для серверов функционирующих на APACHE, для NGINX настройки в файле .htaccess работать не будут. В примерах используется %{QUERY} — так обозначается часть URL, которая следует после знака вопроса. Правила для редиректа срабатывают только при условии соответствия правилу указанному в редиректе.


При настройке правила редиректов в файле .htaccess все правила необходимо указывать после указанных двух строк, либо просто добавьте их:


Options +FollowSymLinks
RewriteEngine On

301 редирект все страниц без WWW на страницы с WWW


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

Обратный редирект со страниц с WWW на страницы без WWW


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

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


Redirect 301 /oldpage.html http://mysite.ru/newpage.html

Переадресация для разделов через RewriteRule


RewriteRule ^papka /papka-new/$1 [R=301,L]

301 редирект для страниц имеющих Get-параметры в URL


Для наглядности примера допустим адрес страницы имеет вид http://mysite.ru/catalog/index.php?IBLOCK_ID=5&SECTION_ID=15. Следующее правило будет делать переадресацию:


RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC]
RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]


Иногда необходимо настроить редирект для изменяющихся Get-параметров, например в текущем примере динамическим параметром будет SECTION_ID:


RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=(.*)$ [NC]
RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]

Переадресация со страниц без значения Get-параметра


Например адрес страницы имеет вид — http://mysite.ru/?addon, тогда редирект будет следующим:


RewriteCond %{QUERY} ^addon$ [NC] 
RewriteRule ^$ /? [R=301,L]

Переадресация одного адреса, без вложенных адресов


Например довольно часто необходимо настроить переадресацию со страницы раздела http:/site.ru/razdel/, однако прочие страницы в данном разделе должны работать без редиректа, например страница http://mysite.ru/razdel/section.php?SECTION_ID=1. Для этого нужно добавить всего один символ — $.


RewriteRule ^razdel/$ http://mysite.ru/new-razdel/ [R=301,L]

Настройка кириллических доменов .РФ


Правила и логика работы с доменами на кириллице абсолютно такие же, единственным отличием является замена символов кириллицы на специальный код.

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


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

Правило для доменов .РФ


RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]

Редирект на папки со слешем на конце


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite.ru/$1/ [L,R=301]

Редирект на папку без слеша — убираем слеш на конце


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

Переадресация с домена в папку другого сайта

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

Редирект со всех страниц кроме определенной папки

Для примера возьмем в исключение папку панели администратора в CMS Bitrix


RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301] 
RewriteRule ^(.*)$ http://mysite.ru/ [L,R=301]

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


RewriteRule ^papka(.*)$ /my-file.html [L,R=301]

Переадресация файлов папки на другой файл с исключением


RewriteRule ^papka/file.html /new-file.html [L,R=301]
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]

Редирект замены расширений файлов — с html на php


RedirectMatch 301 (.*)\.html$ http://newsite.ru$1.php

Указываем порядок загрузки индексных файлов в корне


DirectoryIndex index.php index.html index.htm index.shtml

Редирект с index.php на корень сайта


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

Редирект всех индексных страниц на корень


RewriteRule ^(.*)index\.php$ http://mysite.ru/$1 [R=301,L]

Переадресация с поддомена на основной домен


RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ [NC] 
RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI} [R=301,NC,L,QSA]

Редирект страницы из различных директорий


Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.


RewriteRule [^abc]/nash-file.php /nash-file.php [R=301,L]

Создаем ЧПУ-копию динамических страниц

Для страницы появится обычный URL без передачи Get-параметров.


RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123 [NC,L]

Переадресация с https на http

Необходимое правило для решения проблемы с дублями страниц в поисковых системах.


RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

Настройка ответа 403 для спама по REFERER


Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:


RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR] 
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]

Обработка ошибки 404 в .htaccess

Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц

ErrorDocument 404 /404-for-me.php

Особенности настройки

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


Избегайте цепочек редиректов, когда от старой до новой страницы осуществляется посещение еще одной страницы. Цепочки переадресаций негативно влияют на доверие пользователей и поисковых систем.

Включение редиректа для определенных User Agent

Например редирект на мобильную версию для планшетов и смартфонов:


RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]  
RewriteRule (.*) http://m.mysite.ru/ [L,R=301]

Настройка редиректов для всех поисковых роботов


RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC] 
RewriteRule (.*) http://no-rank-site.ru/ [L,R=301]

Синтаксис и символы

  • . — Точка означает любой символ.
  • [abc] — перечень символов, совпадающих с буквами a, b, или с.
  • [^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
  • * — предыдущий символ может повторяться 0 и более раз.
  • [abc]* — найти символы из заданного набора идущие подряд.
  • [^abc]* — обратная операция.
  • .* — замена любого набора символов. «.*» — найти все подстроки между кавычками.
  • ^ — обознает начало строки (при использовании в начале выражения).
  • $ — конец строки.
  • \w — буква, цифра или подчёркивание _.
  • \d — любая цифра.
  • \D — любой символ, кроме цифр.
  • [0-9] — указание на любую цифру.
  • [a-z] — указание на любую букву от a до z с нижним регистром.
  • [A-Z] — указание на любую букву от A до Z с верхним регистром.
  • [a-zA-Z] — любая буква от a до Z, регистр не важен.
  • [a-Z] — тоже самое, только короче.

Флаги для доп. опций

  • NC — NoCase отключает проверку регистра символов при срабатывании правила.
  • R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
  • L — Last останавливает создание URL-адреса и строка считается окончательной.

www на без www, http на https, с домена на другой домен

Опубликовано:
29 августа 2014

Обновлено:
25 июня 2020

683 662

Три важных совета и семнадцать конкретных примеров установки 301 переадресации страниц через htaccess!

Советы

Располагайте переадресации страниц в файле от частных к более глобальным (сверху вниз). Например: простая переадресация двух страниц стоит выше, чем глобальное правило редиректов с www на без www.

Избегайте последовательных редиректов (двух, трех и т.д.). Правила должны быть настроены так, что при возникновении редиректа он должен перенаправлять пользователя (робота) только один (!) раз. Каждое лишнее переадресация – это секунды драгоценного времени отдачи страницы, это нагрузка на сервер, это нечеткие команды для поисковых роботов.

Не забывайте, что многие браузеры кешируют (запоминают редиректы), поэтому проверять переадресации лучше на сайте – http://www.bertal.ru.

В файле обязательно должна присутствовать команда:

RewriteEngine On  

Второй способ сделать редирект – это переадресация через php

Правила переадресаций

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

Самый простой вариант

Redirect 301 /test-1/ http://site.ru/test-2/

Более подробный

RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]

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

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

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

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

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

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

5. 301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)

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

6. Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы

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

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

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

7. Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы

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

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

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

8. Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы

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

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

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

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

9. Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы

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

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

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

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

10. 301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru

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

11. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

Пример: типа site.ru/index.php?n=1 на site.ru/?n=1

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

12. 301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]

13. 301 редирект url с GET параметрами (динамический URL) на статический

1 вариант (простой адрес с GET параметром)

RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L] 

2 вариант (со страницы и GET параметром)

RewriteCond %{REQUEST_URI} /test/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L] 

14. Все страницы одного домена на главную страницу другого домена

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

15. Каждая страница одного домена на такой же адрес другого url

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

16. Редирект с протокола http на https.

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

Если возникает циклический редирект, то воспользуйтесь этим вариантом:

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

Для Битрикс-сайтов на хостинге reg.ru

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

Для сертификатов https c Cloudflare:

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
# Without Cloudflare:
# RewriteCond %{HTTPS} off 
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,R=301,L]

17. Редирект с протокола https на http.

Обратный редирект, если перестали использовать SSL сертификат.

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

Может быть полезно:

301 редирект страницы с параметром с помощью .htaccess

В интернете написано много примеров, как настроить с помощью файла .htaccess переадресацию с одной конкретной страницы сайта на другую, с нескольких страниц на одну, с WWW на без WWW, с HTTP на HTTPS и др. Но нормальных примеров для 301 редиректа с использованием страниц, имеющих параметры, не удалось найти.

Как-то просматривая логи сайта https://skalolaskovy.ru, были обнаружены левые попытки авторизации через фронтенд, типа таких:


 

 

Авиационные и компьютерные заметки: Неудачные попытки https://skalolaskovy.ru/

Имя пользователя:marinovalilya

IP-адрес: 79.126.111.215

Дата и время:2019-11-09 13:30:40

Источник:Frontend

 

 

 

Авиационные и компьютерные заметки: Неудачные попытки https://skalolaskovy.ru/

Имя пользователя:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0

IP-адрес: 82.79.59.75

Дата и время:2019-10-10 13:03:14

Источник:Frontend

 

 

 

Авиационные и компьютерные заметки: Неудачные попытки https://skalolaskovy.ru/

Имя пользователя:Keithsah

IP-адрес: 95.73.109.6

Дата и время:2019-11-10 08:36:14

Источник:Frontend

 

 

 

Авиационные и компьютерные заметки: Неудачные попытки https://skalolaskovy.ru/

Имя пользователя:piterSelp

IP-адрес: 188.165.232.202

Дата и время:2019-11-10 00:47:21

Источник:Frontend

 

 

 

Авиационные и компьютерные заметки: Неудачные попытки https://skalolaskovy.ru/

Имя пользователя:rardlitte

IP-адрес: 128.90.164.161

Дата и время:2019-11-09 14:44:53

Источник:Frontend

 

Но, так как регистрация пользователей на сайте отключена и, соответственно, авторизация тоже не нужна, эти запросы считаем паразитными и несанкционированными!



В связи с этим возникла задача — запретить пользователям сайта (в том числе и всяким ботам) заходить на страницы авторизации. У сайтов с CMS Joomla страница авторизации, даже если она не завязана ни на какой-либо пункт меню, может быть открыта по следующим адресам:

 

/component/users/?view=login

 

или 

 

/component/users/

 

или

 

/?option=com_users&view=login

 

или

 

/?option=com_users

 

Причем, у первого, третьего и четвертого вариантов в адресе страницы присутствует параметр:

?view=login и 

?option=com_users&view=login

?option=com_users

соответственно.

И для них пришлось отдельно прописывать индивидуальное правило и добавлять еще одну дополнительную строку с указанием в ней условия для редиректа.



Таким образом, запись в файле .htaccess для переадресации со страницы авторизации CMS Joomla на главную страницу должна быть следующей:

 

RewriteEngine On

 

## Redirect from LOGIN PAGE to INDEX page:

RewriteCond %{REQUEST_URI} /component/users [NC]
RewriteCond %{QUERY_STRING} view=login [NC]
RewriteRule .* https://skalolaskovy.ru/? [R=301,L]

 

RewriteCond %{REQUEST_URI} /component/users [NC]
RewriteRule .* https://skalolaskovy.ru/? [R=301,L]

 

RewriteCond %{REQUEST_URI} / [NC]
RewriteCond %{QUERY_STRING} option=com_users&view=login [NC]
RewriteRule .* https://skalolaskovy.ru/? [R=301,L]

 

RewriteCond %{REQUEST_URI} / [NC]
RewriteCond %{QUERY_STRING} option=com_users [NC]
RewriteRule .* https://skalolaskovy.ru/? [R=301,L]

 

 На всякий случай надо понаблюдать за результатом этой защиты, вдруг есть еще лазейки? 

 

Редирект 301 в htaccess, как настроить правильную переадресацию или 301 redirect

Редирект 301 или 301 Permanent Redirect — это правило, которое автоматически переадресовывает пользователя на другой адрес страницы. С его помощью вы можете склеить старые страницы с новыми или перенести сайт на другой домен, убрать многие дубли с сайта и многое другое. Крайне полезная вещь — поэтому нужно научиться делать его правильно!

Так же при 301 редиректе происходит склейка тИЦ (читаем что такое тиц) и PR — т.е. вы можете сохранить старое значение на новом адресе. Вы можете нисколько не потерять в глазах поисковых систем. Давайте перейдем от теории к практике.

Как настроить 301 редирект в htaccess

Файл под названием .htaccess находится в главной категории вашего сайта. Это служебный файл, в котором мы будем указывать правила склейки. Открываем файл блокнотом (рекомендую notepad++, чтобы не было проблем с кодировкой). Не забывайте, что это один из важных пунктов в работе SEO специалиста.

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

Options +FollowSymLinks
  RewriteEngine On
  #Здесь указываем правила

Все правила записываются в виде:

RewriteCond [Сравнение] [Условие] [Флаги]
RewriteCond [Сравнение] [Условие] [Флаги]
RewriteRule [Шаблон] [Подстановка] [Флаги]

Теперь непосредственно займемся переадресацией и разберем конкретные примеры.

Я уже писал статью про склейку зеркал сайта, но на всякий случай здесь обобщу, чтобы вам было удобнее пользоваться страницей.

Примеры использования 301 редиректа

Редирект с index.php на главную

Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:

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

Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html

Склеиваем алиасы сайта

Если у вас несколько доменов и вы хотите все их перенаправлять на основной сайт, то используем:

RewriteCond %{HTTP_HOST} ^vash-sait.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

Обратите внимание на первые 2 строки, там указано зеркало в зоне .com, если у вас иная или несколько зон, то добавляем правила.

Редирект с www на без www

Этот способ я уже описывал ранее, но повторюсь. Для того, чтобы склеить зеркала и выбрать основным домен без www прописываем:

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

Редирект с домена без www на домен с www

Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:

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

301 редирект страниц со слэшем и без

Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:

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

Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:

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

Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:

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

где, «//» можно заменить на «—» или любые сдвоенные символы в урле.

Массовая замена категории

Бывает, что вы переименовали категорию, а за ней закреплены тысячи урлов. Чтобы не состарится во время написания тысяч одинаковых перенаправлений юзаем:

RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2 [R=301,L]

Если у вас категория идет сразу после домена (типа site.ru/category/), то используем другой вариант:

RewriteRule old-category /(.*) / old-category /$1 [R=301,L]

Редирект на новую страницу

Самый простой редирект со страницы на страницу, для это просто пропишите так:

Redirect 301 /old-post.html http://new-site.ru/new-post.html

Где old-post.html — это ваша старая страница, а new-site.ru/new-post.html — это новая страница и она может быть на любом домене (включая ваш текущий домен).

Редирект для url с параметрами

Страницы с параметрами редиректятся сложнее, возьмем пример http://site.ru/page.php?sort=articles. Параметр здесь «sort=articles». Код будет следующим:

RewriteCond %{QUERY_STRING} sort=articles
RewriteRule .* http://site.ru/page.php? [R=301,L]

Работаем с расширениями

Убираем .html из url (для удаления .php не забудьте заменить $1.html на $1.php):

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]

Меняем .php на .html в урлах и наоборот (не забываем поменять местами в коде):

RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html

Правильный 301 редирект на новый домен

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

RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} ^site\.ru
RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site\.ru
RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]

С помощью таких не хитрых махинаций мы избавимся от дублей страниц, тем самым улучшив нашу внутреннюю оптимизацию и соответственно качество сайта.

Если у вас появились какие-то вопросы, пишите в комментарии — будем разбираться 🙂

Понравился пост? Сделай репост и подпишись!

301 редирект в htaccess — все примеры и правила настройки

Ленар Амирханов

С 2008 года автор популярного в прошлом SEO-блога yavbloge.ru (в последние годы не обновляется).

В 2011 году основал агентство интернет-рекламы …

Поделитесь статьёй с друзьями и коллегами

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

Например, директива 301 отвечает за автоматическое перенаправление пользователя с одной страницы на другую.

Важно: в процессе изменения файла .htaccess и последующего сохранения нужно сохранять кодировку UTF-8 без специальных символов BOM. Для этого лучше всего создавать файл и редактировать его не в стандартном «Блокноте», а в специальных программах-редакторах, например, Notepad++.

При сохранении файла в название следует добавить формат «.htaccess», убрав расширение .txt.

Настройка редиректа 301 позволяет ускорить процесс автоматического перевода пользователя на нужную страницу, если старая по каким-то причинам неактуальна.

Общие правила настройки редиректа 301

  •  В списке правил редиректа простые переадресации отдельных страниц должны стоять выше, чем «общие» для всего сайта, такие как редирект с www на https.
  •  редирект должен быть один. Перенаправление пользователя или поискового бота делается только один раз, без промежуточных страниц.
  •  в верхних строках файла должны быть прописаны специальные команды Options +FollowSymLinks и RewriteEngine On (до обозначения всех правил редиректа)
  •  правила RewriteRule выполняются при помощи строки RewriteCond
  •  задавать дополнительные опции для применяемых правил можно, перечисляя их в квадратных скобках через запятые, например, [R=301,L]
  •  на хостинге необходимо подключить модули mod_alias (они позволяют поддерживать правила Redirect, RedirectPermanent и RedirectMatch).

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

Redirect [status] /начальная_страница http://конечная_страница_полный_адрес

Это правило регулирует прямой переход с одной страницы на другую.

В поле status необходимо вписать код 301.

В поле «начальная страница» указывается не полный адрес домена, а относительный (URL после слэша «/»).

Конечная страница при этом прописывается полностью: название URL и протокола.

Пример простого редиректа

Redirect 301 /page1.php https://website.ru/page2.php

301 редирект с домена без www на домен www с префиксом

RewriteCond %{HTTP_HOST} ^webweb\.ru$ [NC]

RewriteRule ^(.*)$ http://www.webweb.ru/$1 [R=301,L]

301 редирект с www на домен без www

RewriteCond %{HTTP_HOST} ^www.webweb\.ru$ [NC]

RewriteRule ^(.*)$ http://webweb.ru/$1 [R=301,L]

Редирект для HTTPS-версии сайта

RewriteCond %{SERVER_PORT} ^80$ [OR]

RewriteCond %{HTTP} =on

RewriteRule ^(.*)$ https://webweb.ru/$1 [R=301,L]

Редирект статических страниц

Redirect 301 /page1.php http://www.webweb.ru/page2.php

В новом адресе (страница переадресации) указывается URL полностью

301-редирект для страницы с GET параметрами

Со страниц, имеющих параметры GET, переадресация на новый адрес выглядит следующим образом:

http://www.webweb.ru/dir/index.php?IBLOCK_ID=2&SECTION_ID=222

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=2&SECTION_ID=222$ [NC]

RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]

Переадресация со страниц без заданных параметров

Для cтраницы, на которой параметры не заданы, например http://www.webweb.ru/?111 переадресация выполняется с помощью следующего правила:

RewriteCond %{QUERY_STRING} ^111$ [NC]

RewriteRule ^$ /? [R=301,L]

301 редирект для отдельных файлов из папки

Допустим, что необходимо переадресовать только страницу

http://www.webweb.ru/dir/

и оставить на месте страницу http://www.webweb.ru/dir/index.php?IBLOCK_ID=2, которая должна находиться на своем месте.

Для этого применяется правило со специальным символом $.

RewriteRule ^dir/$ http://www.webweb.ru/new-dir/ [R=301,L]

Переадресация страниц в зоне РФ

Адреса кириллических доменов, например, в зоне РФ подчиняются тем же правилам, что и URL, записанные латиницей, при этом кириллические символы заменяются альтернативной кодировкой на латинице.

Переадресация с одного домена на другой

RewriteCond %{HTTP_HOST} ^old-webweb\.ru$ [NC]

RewriteRule ^(.*)$ http://www.new-webweb.ru/$1 [R=301,L]

301 редирект папок, оканчивающихся на слэш

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..{1,10}$

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*)$ http://www.webweb.ru/$1/ [L,R=301]

301 редирект папок, не имеющих слэша

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^(.+)/$

RewriteRule ^(.+)/$ http://www.webweb.ru/$1 [R=301,L]

Переадресация со старого адреса на папку с новым адресом

RewriteCond %{HTTP_HOST} ^web-web\.ru$ [NC]

RewriteRule ^(.*)$ http://www.webweb.ru/web-web/ [R=301,L]

Переадресация полной папки на указанный файл

RewriteRule ^dir(.*)$ /new-file.php [L,R=301]

Переадресация всей папки, за исключением указанного файла

RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]

RewriteRule ^dir(.*)$ /all.php [L,R=301]

Замена расширения с html на php

RedirectMatch 301 (.*)\.html$ http://www.webweb.ru$1.php

Устранение дублей URL с HTTPS

RewriteCond %{HTTPS} «on»

RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

Перенос домена на протокол HTTPS

RewriteCond %{SERVER_PORT} ^80$ [OR]

RewriteCond %{HTTP} =on

RewriteRule ^(.*)$ https://webweb.ru/$1 [R=301,L]

Путь к странице ошибки 404

ErrorDocument 404 /404-for-me.php

Важно: расположение строк в файле имеет значение. Все внесенные в файл правила выполняются в строгом соответствии с порядком их внесения.

То есть, чем выше строка, тем раньше выполняется правило, и наоборот.

301 редирект с автоматической генерацией кода

Самый простой способ не ошибиться с кодом редиректа — использовать автоматический генератор htaccess, например, Lenartools. Достаточно выбрать параметры перенаправления, например, со страницы с www на страницу без www, указать адрес, с которого требуется перенаправить поискового бота и пользователя, и нужный код будет сгенерирован автоматически, без мучительного мануального создания нужной комбинации.

Схема простая, понятная и не требующая даже простых навыков веб-мастеринга. 

Вам понравилась статья?

9

1

301 редирект в файле .htaccess. Примеры

Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} — обозначает фрагмент URL-адреса после знака вопроса (задания значений CGI-параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) см. памятку в конце страницы.

Ниже даны наиболее используемые правила настройки файла .htaccess для 301 редиректа. Лучше размещать все правила после двух строк:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://your-site.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php

При этом, новый адрес указывать необходимо полностью с http и доменным именем.

RewriteRule ^dir /dir-new/$1 [R=301,L]

При модернизации динамического сайта и создании ЧПУ-адресов часто возникает необходимость перенаправить старые страницы с параметрами ID на новые с ЧПУ. Например, чтобы переадресовать страницу вида http://site.com/page.php?id=12 на новую страницу http://site.com/newname.html, используется следующая конструкция:

RewriteCond %{QUERY_STRING} ^id=12$
RewriteRule ^/page.php$ http://site.com/newname.html [L,R=301]

Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111, тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC]
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]

Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC]
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]

Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.

RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]

Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.

  • 301 редирект с домена на домен #
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

И для домена в зоне РФ:

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
  • 301 редирект с домена на папку на другом домене #
RewriteCond %{HTTP_HOST} ^si-te\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
RewriteRule ^dir(.*)$ /all.php [L,R=301]
RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

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

+Для всех индексных страниц на сайте:

RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA] 
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L] 

Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.

RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]

Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/

RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.

RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]

Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.

Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:

ErrorDocument 404 /404-for-me.php
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+)\.site\.com$ 
RewriteRule ^(.*) http://site.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+)\.site\.com$ 
RewriteCond %{HTTP_HOST} !=one.site.com [NC]
RewriteRule ^(.*) http://site.com/$1 [R=301,L]

! Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.

! Для сайтов, на которых используется не сервер Apache, аналогичные 301 редиректы легко настраиваются с помощью PHP:

! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.

RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]

RewriteRule (.*) http://mobile.site.ru/ [L,R=301]

RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]

RewriteRule (.*) http://no-search.site.ru/ [L,R=301]

Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/

RewriteCond %{QUERY_STRING} ^view=featured$ [NC]
RewriteRule ^component/content/?$ /? [R=301,L]

Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/

RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
RewriteRule ^index\.php$ /? [R=301,L] 
. — Точка заменяет произвольный символ.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. ".*" — найдёт все подстроки между кавычками.
^ — начало строки (в том случае, если используется в начале выражения).
$ — обозначает конец строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
[0-9] — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
RewriteRule (.*) $1? [R=301,L]

Располагать после: RewriteBase /

Памятка по используемым символам и обозначениям

Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.

^ — спецсимвол начала строки;
$ — спецсимвол конца строки;
! — спецсимвол отрицания;
. — точка, заменяет любой символ, но только один;
() — группировка;
\ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.

? — символ повторяется 0 или 1 раз.
+ — повторяется от 1 до 65536 раз.
* — повторяется от 0 до 65536 раз.

Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].

NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.

Полезные ссылки:

UPD:

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

обратно:

RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://your_site.com/$1 [R=301,L]

⇥ Для WordPress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>
# END WordPress

RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L]

RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

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

RewriteCond %{HTTP:X-Forwarded-Protocol} !=https 
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

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

Можно также настроить 301 редирект через .htaccess только для одной страницы. В примерах приведено название testpage.php, его замените на адрес нужной страницы. Используйте только один из приведенных вариантов:


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

RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/testpage.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI> [QSA,L]

*Примечание:

Настройку редиректа с http на https необходимо проводить после установки SSL-сертификата на сайт. Сначала спросите в поддержке хостинга, какой способ настройки переадресации актуальный в вашем случае. Если вы собираетесь настроить редирект с https на http вручную, используйте файл .htaccess. Вносите по очереди разные команды, проверяя каждую из них вводом адреса с http.

Если сайт работает на Битрикс, исправьте абсолютные ссылки на относительные, затем обновите файлы sitemap.xls и robots.txt и внесите исправленную информацию в Яндекс.Вебмастер и Google Search Console. Настройте интеграцию с через протокол http, чтобы не пришлось переписывать всю программу. Проверьте правильность работы переадресации через онлайн-инструменты (например, Redirect Checker)

Если все ссылки с http без ошибок ведут на https, установку SSL-сертификата можно считать завершенной.

 Источник     Источник 

Как сделать 301 редирект в .htaccess: переадресация страниц

Есть проблемы с ранжированием, проект не растет, хотите проверить работу своих специалистов по продвижению? Закажите профессиональный аудит в Семантике

Получи нашу книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».


Подпишись на рассылку и получи книгу в подарок!

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

301 Permanent Redirect / 301 редирект…

… это переадресация пользователя на другой адрес страницы или домена. Этот код ответа сервера означает, что страница и ресурс переехали навсегда и теперь доступны в другому адресу.

Есть мифы, связанные с редиректами: например, что при редиректе не передаётся PR страницы, но этот миф был развенчан одним из вебмастеров Google Джоном Мюллером в своем блоге. Или что вместо 301 Moved Permanently редиректа можно использовать 302 Temporary Redirect.

 

 

Существует целый класс 3хх редиректов. Наиболее часто используются коды 301 и 302 — они как двойняшки, которые вроде бы и похожи, но всё-таки различаются. А для поискового робота это два совершенно разных человека, и трактуются такие ответы сервера по-разному:

  1. 301 Moved Permanently: постоянный редирект. Этот код уведомляет о том, что ресурс перемещен на новый адрес на постоянной основе с удалением прошлого домена. Нужен для окончательного переезда на новый ресурс, новую CMS или для склейки страниц.
  2. 302 Temporary Redirect: временный редирект. Уведомляет о временном переезде сайта или его страницы. Используется при технических работах на сайте.

Как эти коды отразятся на выдаче:

  • При 301 редиректе в поисковой выдаче начинает отображаться новый URL, но это может занять некоторое время. Google советует сохранять статус страницы в течение года.
  • При 302 редиректе в поиске сохраняется старый URL страницы, но через 6 месяцев использования 302 редиректа поисковая система начинает считать его за постоянный 301, т.к. временное перенаправление не зря названо «временным», а полгода — достаточно большой срок.

Из-за подобных ошибок вебмастеров и злоупотребления 302 редиректом в неэтичных целях SEO-специалисты очень не советуют использовать его на своём сайте, ведь даже за небольшое подозрение в черном SEO вы можете схлопотать серьезный штраф. Давайте лучше разберемся как можно настроить легальный 301 редирект в .htaccess

 

Файл .htaccess — это файл конфигурации HTTP-сервера, наподобие Apache. С его помощью задается большое количество дополнительный параметров и разрешений веб-сервера, распространяет свои права только на каталог, в котором располагается, и его дочерние подкаталоги.

 

Самый простой пример редиректа: с сайта на сайт

Redirect / www.example.com

www.example.com — сайт, на который мы перенаправляем запрос пользователя.

Чуть более сложный пример — если мы хотим сделать редирект со страниц нашего сайта на другой сайт. Или, например, сделать редирект на главную страницу.

Redirect /semantica semantica.in/

Redirect /semantica/blog semantica.in/blog

Redirect 301 /kernel semantica.in/

 

Что всё это значит:

1 строка — при обращении к странице www.example.com/semantica будет открываться сайт semantica.in/

2 строка — при обращении к http://www.example.com/semantica/blog будет открываться semantica.in/blog

3 строка — веб-сервер будет отдавать код 301 о постоянном переезде на новый URL

 

Теперь, когда вы примерно понимаете, как это работает, можно переходить на задачи посложнее.

 

 

Сложные редиректы

Для сложных редиректов существует модуль mod_rewrite — это средство преобразования URL-адресов, использующее регулярное выражение. Для редиректа используются три важные директивы: RewriteCond, RewriteRule и RewriteEngine.

  1. RewriteEngine включает или выключает работу механизма преобразования:

RewriteEngine on | off

Положение on-off включает и выключает работу модуля.

2. RewriteCond — определяет условие какого-либо правила, при котором происходит преобразование. Сразу после директивы чаще всего идут переменные %{HTTP_HOST} и %{REQUEST_URI}, которые означают адрес сервера (например, example.ru) и ресурс, запрошенный в строке HTTP-запроса, соответственно.

3. RewriteRule — идёт после одного или нескольких RewriteCond. Это правило преобразования URI, которое применяется только при условии выполнения RewriteCond.

Синтаксис директивы RewriteRule выглядит следующим образом:

 RewriteRule Шаблон Подстановка [flag]

 

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

Метасимволы используются для задания групп символов и меток в шаблоне:

  • ^ — метка начала строки,
  • $ — метка конца строки,
  • \ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
  • . — точка, обозначает любой символ, но только один,
  • () — группировка.
  • ! — отрицание,

Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую:

  • NC — (nocase) отключает проверку регистра символов.
  • R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY).
  • L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.

 

Как сделать 301 редирект? 

Теперь, зная эти правила, мы можем попытаться самостоятельно сделать редирект с помощью htaccess.

  1. Редирект .htaccess на другую страницу
Redirect 301 /old-post.html http://new-site.ru/new-post.html

 

  1. Редирект .htaccess с www на без www

RewriteEngine on

RewriteCond %{HTTP_HOST} !^site.ru$ [NC]

RewriteRule ^(.*)$ site.ru/$1 [R=301,L]

 

  1. Редирект .htaccess с без www на www

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.site.ru$ [NC]

RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]

где site.ru — ваше доменное имя.

 

  1. Редирект с index.php (html) на главную страницу

RewriteEngine on

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/

RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]

 

  1. Редирект со слешем на без слеша

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

 

  1. Редирект со страниц без слеша на слеш

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

 

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

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

 

  1. Редирект с http на https через. htaccess

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

 

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

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

 

  1. Избавление от дублей страниц

Если вы заметили, что к адресу основной страницы приклеивается что-то вроде &sa=123 456 или &crw=123 456 и подобное, просто замените буквенную часть в следующем коде


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

Пример: объясняем на пальцах

Как с помощью 301 редиректа сделать так, чтобы по запросу site.ru/category/art1/zapis/ в строке адреса было site.ru/zapis/, то есть /category/art1 вырезалась бы из строки, но после вырезания строки показывалось содержимое site.ru/category/art1/zapis/?

Легко:



RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^category/art1/zapis/$ http://%{HTTP_HOST}/zapis/ [R=301,L]
RewriteRule ^zapis/$ /category/art1/zapis/ [L]


А теперь давайте подробнее разберем, что же тут написано и что вообще происходит.

Как известно mod_rewrit на apache постоянно просматривает список правил, пока URL можно хоть как-то изменить.
И не редко получаются бесконечные циклы.

Чтобы ограничить цикл выполнения правил одной итерацией, можно использовать конструкцию из первой строки. Она предает apache статус был ли выполнен редирект или нет и если да, то пропустить следующие правила. К слову, на nginx эта строка не нужна.

Вторая строка делает 301 редирект с www.site.ru/category/art1/zapis/ на www.site.ru/zapis/
Третья же строка говорит серверу, что если адрес вида www.site.ru/zapis/, то надо показывать то, что находится по адресу www.site.ru/category/art1/zapis/

Помните, что с великой силой редиректа приходит и великая ответственность, так что используйте полученный знания с умом.

 

 

  1. Принцип «от меньшему к большему»: располагайте редиректы от частных к более глобальны. Т. е. переадресация со страницы на страницу будет выше, чем переадресация с без www на www.
  2. Избегайте последовательных — двойных, тройных — редиректов. Один редирект перенаправляет пользователя только один раз.
  3. Проверьте HTTP заголовки и статусы ответа сервера, чтобы убедиться в правильности работы редиректа.

 

В заключении хотелось бы по пунктам огласить условиях при которых стоит и не стоит использовать .htaccess переадресацию.

 

Когда редирект необходим

  1. Вы переехали на другой домен: и вам логично не хочется потерять своих клиентов — настоящих и потенциальных, а также есть необходимость передать вес прошлого сайта на новый.
  2. Хотите склеить зеркала: у вас несколько доменных имён с разным написанием бренда и вы перенаправляете всех посетителей на основной сайт.
  3. Страница сменила свой адрес: структура вашего сайта была реорганизована и вы пытаетесь предотвратить возможный беспорядок.
  4. Хотите избавиться от дублей страниц или копии сайта: не стоит относится к дублям как чему-то безвредному и незначительному. С дублями вы теряете в весе и сдаете позиции конкурентам, а так же дублирование контента может привести к штрафам от поисковых систем.

 

 

В каких случаях не нужно использовать редирект?

  1. Вы временно переезжаете на новую страницу: для этого есть 302 и 307 код, это гарантия того, что не произойдёт склейки страниц и оригинальная страница не выпадет из поисковой выдачи.
  2. Вы переезжаете из-за проблем со старым доменом: если у вас есть баны, фильтры и штрафы, то при склейке к вам перейдет не только ТИЦ и PR, но и все беды, от которых вы бежали.

.htaccess — 301 скрытый редирект с параметром

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

apache — .htaccess: 301 перенаправить параметр url «instr» на путь

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *