Перейти к содержимому



301 редирект [полное руководство]

#1 r0mZet

r0mZet
  • Модератор
  • 1 205 сообщений
  • Репутация: 201
6

Отправлено 28 Январь 2016 - 21:32

Собраны варианты 301 редиректа на все случаи жизни. Если кто может дополнить список, вэлкам.
 
301 редирект с одной страницы на другую
 
Redirect 301 /test-1/ http://site.ru/test-2/
Более подробный
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]
 301 редирект с www на без www (главное зеркало – домен без www)
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
301 редирект с без www на www (главное зеркало – домен с www)
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
301 редирект со страниц со слешем на без слеша (весь сайт)
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Один (а не два последовательных!) 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]
Один (а не два последовательных!) 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]
Один (а не два последовательных!) 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]
Один (а не два последовательных!) 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]
301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]
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]
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]
Все страницы одного домена на главную страницу другого домена
 
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]
Каждая страница одного домена на такой же адрес другого url
 
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
Редирект с протокола http на https.
 
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Обратный редирект. Исключаем использование защищенного протокола не отключая его физически на хостинге.
 
Редирект с протокола https на http.
 
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Другие варианты редиректа с протокола http на https.


 

RewriteEngine On
RewriteCond %{HTTPS} =off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteEngine On
RewriteCond %{HTTP:SSL} !1
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Для статичного/самописного сайта на PHP (не Wordpress) на хостинге Timeweb мне помог код:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.ru[nc]
RewriteRule ^(.*)$ https://site.ru/$1 [r=301,nc]
# или RewriteRule ^(.*)$ https://www.site.ru/$1 [r=301,nc] если нужно с www

Для тех кто работает с JINO.RU 

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

 

Сообщение отредактировал r0mZet: 19 Апрель 2017 - 06:10
подправил пояснения

  • 3

Копирую любой Landing Page. Сходство 100%, рабочие JS и РНР-формы. 



robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Как правильно сделать редирект со всех страниц на главную
  2. Redirect 301. Как редиректить файлы?
  3. Редирект 301 на https версию сайта
  4. Помогите настроить редирект 301
  5. 301 редирект страницы на саму себя и Wordpress

#2 ShowPrint

ShowPrint
  • Пользователь PRO
  • 2 849 сообщений
  • Репутация: 749

Отправлено 28 Январь 2016 - 23:16

Еще хорошая подборка вот здесь:

http://blogerator(точка)ru/page/fajl-primery-htaccess-redirekt-dostup

Вот здесь куча полезной инфы по апачу:

http://www.egoroff.spb(точка)ru/portfolio/

А вот это сам изобретал, поэтому наверняка "кривенько"...

RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !^(.*)(id=|num=|video=|text=)(.*)$
RewriteRule (.*) $1? [L,R=301]

Сия хрень проверяет get-параметры, если они есть и не из списка "одобренных" (id,num,video,text), то 301-редирект на морду без параметров...

Пусть и кривенько, но пока работает...  <_<


Сообщение отредактировал ShowPrint: 28 Январь 2016 - 23:17

  • 2
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#3 miketomlin

miketomlin
  • Пользователь
  • 443 сообщений
  • Репутация: 86

Отправлено 29 Январь 2016 - 15:53

Насчет "кривенько" не знаю, но не очень красивенько. Зачем "равно" нужно было дублировать?


  • 0

#4 ShowPrint

ShowPrint
  • Пользователь PRO
  • 2 849 сообщений
  • Репутация: 749

Отправлено 29 Январь 2016 - 17:46

@miketomlin, скопировал как стоит и как работает. Более чем уверен что можно написать и грамотнее и менее ресурсо-затратно, но...

Я - ламер, с апачем "на Вы и с глубоким поклоном", каждый кто "на ты" - может сделать красиво...

 

Изобретал как мог, поделился больше как "в качестве идеи", вдруг кому пригодится, или наведет на мысли...  B)


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#5 miketomlin

miketomlin
  • Пользователь
  • 443 сообщений
  • Репутация: 86

Отправлено 29 Январь 2016 - 18:47

Я понял. Для меня ваше "кривенько" прозвучало, как призыв поумничать. Кстати, помимо "равно" эту строчку можно еще упростить.


  • 0

#6 ShowPrint

ShowPrint
  • Пользователь PRO
  • 2 849 сообщений
  • Репутация: 749

Отправлено 29 Январь 2016 - 18:54

помимо "равно" эту строчку можно еще упростить
 Ни капли не сомневаюсь, а "кривенько" - это был не "призыв", а скромность...

 

Собственно если есть опыт сделать правило универсальным и "красивым", то чем умничать - поправили бы и написали, чтоб народ не моей "кривизной" пользовался, а красивым правилом  ;)

 

Я-то писал, чтоб "мало-ли кому пригодится"... Когда мне надо было - в инете не нашел и пришлось "вычеркнуть" ночь из жизни на "глубокое проникновение в апач"...

 

Причем до сих пор так и не понял: то ли "я его", то ли "он меня"... ну это самое... проникнул...  :D


  • 1
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#7 HITMAN84

HITMAN84
  • Пользователь
  • 47 сообщений
  • Репутация: 0

Отправлено 28 Январь 2018 - 11:55

Какой должен быть редирект для домена на новый домен, далее чтоб с Чпу 2 пошел на Чпу 1


  • 0

#8 Naizmene

Naizmene
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 30 Январь 2018 - 00:15

Здравствуйте прописал вот такие редиректы 

 

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.1000-melohey.ru$ [NC]
RewriteRule ^(.*)$ http://1000-melohey.ru/$1 [R=301,L]
 
 
в robots.txt
 
User-Agent: *
Disallow: /blok
Disallow: /user/
Disallow: /admin/
Disallow: /pages/viget.php
Disallow: /pages/obr.php
Disallow: /404.php
Host: 1000-melohey.ru
 
теперь яндекс считает домен склеянным не подскажете в чем ошибка ?

Сообщение отредактировал Naizmene: 30 Январь 2018 - 00:17

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru