Четверг, 25 Май 2017 18:05

Редирект через htaccess

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

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

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

1

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

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

1

2

RewriteCond %{REQUEST_URI} ^/test/$

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

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

1

2

RewriteCond %{HTTP_HOST} ^www\.(.*)$

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

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

1

2

RewriteCond %{HTTP_HOST} ^([^www].*)$

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

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

1

2

3

4

5

6

RewriteCond %{REQUEST_URI} !\?

RewriteCond %{REQUEST_URI} !\&

RewriteCond %{REQUEST_URI} !\=

RewriteCond %{REQUEST_URI} !\.

RewriteCond %{REQUEST_URI} ![^\/]$

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

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

1

2

3

4

5

6

RewriteCond %{REQUEST_URI} !\?

RewriteCond %{REQUEST_URI} !\&

RewriteCond %{REQUEST_URI} !\=

RewriteCond %{REQUEST_URI} !\.

RewriteCond %{REQUEST_URI} !\/$

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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]

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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]

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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]

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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]

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

1

2

3

RewriteCond %{REQUEST_URI} /index.php

RewriteCond %{QUERY_STRING} ^\z

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

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

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

1

2

RewriteCond %{REQUEST_URI} /index.php

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

  1. 301 редирект для index.php в Joomla (массовая склейка)

1

2

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

RewriteRule ^index\.php$ http://dikom-neva.ru/$1 [R=301,L]

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

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

1

2

RewriteCond %{QUERY_STRING} ^id=229

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

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

1

2

3

RewriteCond %{REQUEST_URI} /test/

RewriteCond %{QUERY_STRING} ^id=229

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

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

1

2

RewriteCond %{REQUEST_URI} (.*)

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

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

1

2

RewriteCond %{REQUEST_URI} (.*)

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

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

1

2

RewriteCond %{HTTPS} !=on

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

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

1

2

3

RewriteCond %{HTTPS} off

RewriteCond %{HTTP:X-Forwarded-Proto} !https

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

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

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

1

2

RewriteCond %{HTTPS} =on

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

 

Опубликовано в Оптимизация

Сайты развиваются: создаются новые разделы, меняется структура, удаляются страницы или переделываются их адреса. Часто за всеми этими процессами уследить очень сложно даже опытному веб-мастеру. Чем старше сайт — тем больше вероятность того, что каждый день он получают процент пользователей, попадающих на страницы, которых больше не существует. Как это отследить? Как оповестить робота и клиента, что таких страниц больше нет? Что показывать пользователю на странице 404? 

404 NOT FOUND

Определение: «404 ошибка сервера (not found) — самая распространенная ошибка при пользовании Интернетом, основная причина — ошибка в написании адреса Web-страницы. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URL.»

Для чего нужна 404 страница?

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

Проверить ответ это очень просто, наберите несуществующий адрес страницы.

  1. Пользователю необходимо сообщить, что запрашиваемой страницы больше (или вообще) не существует, и предоставить возможность работать с сайтом дальше.

Как настроить ответ сервера?

404 ошибка сервера через htaccess

Если Ваш сервер или CMS не настроены автоматически, то придётся это сделать Вам самим — добавьте в htaccess строчку:

1

ErrorDocument 404 http://www.site.ru/404.php

Теперь, когда пользователь введёт неверный адрес, то он будет направлен на этот адрес. Страница может располагаться где угодно, но мы для примера поместили ее в корне сайта: /404.php.

404 ошибка сервера в PHP

Велосипеда изобретать не надо — существует специальная функция header, которая успешно поможет Вам это сделать.

1

header(«HTTP/1.0 404 Not Found»);

Как должна выглядеть страница 404?

  • В дизайне сайта (а не страница по умолчанию вашего хостинга)
  • Содержать информацию о том, что произошла ошибка
  • Иметь форму поиска по сайту
  • Иметь небольшую карту сайта с основными разделами.

Креативные 404 страницы — вред или польза?

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

Как отследить, сколько таких пользователей попадают на страницу 404?

Яндекс.Метрика

Для этого удобно использовать «Параметры визитов».
В код счётчика необходимо добавить строчку: params:window.yaParams||{ }});

Таким образом, должно получиться как-то так:

1

2

3

4

5

6

7

8

w.yaCounterХХХХХХХХ = new Ya.Metrika({id:ХХХХХХХХ,

                    webvisor:true,

                    clickmap:true,

                    trackLinks:true,

                    accurateTrackBounce:true,

                    trackHash:true,

                    ut:"noindex",

                    params:window.yaParams||{ }});

На самой же странице 404 в любом месте необходимо разместить следующий JS-код:

1

2

3

var url = document.location.pathname + document.location.search     

var url_referrer = document.referrer;

var yaParams = {error404: {page: url, from: url_referrer}};

Где url — текущий адрес страницы 404, а url_referrer — адрес, с которого на него попали. Таким образом, мы в Яндекс.Метрике сможем отслеживать не только все 404 страницы, но и адреса, по которым на неё перешли.

Отчёт в Метрике необходимо смотреть тут: все отчеты -> содержание -> параметры визитов.

Подробнее о параметрах визита в Яндекс.Метрике: http://help.yandex.ru/metrika/content/visit-params.xml

Google.Analytics

Для отслеживания ошибок используем «события». Добавляем JS-код в тело страницы:

1

2

3

4

5

6

7

8

9

jQuery(document).ready(function() {

var url = document.location.pathname + document.location.search     

var url_referrer = document.referrer;

ga('send', {'hitType': 'event',

        'eventCategory': 'page-404',

        'eventAction': url,

        'eventLabel': url_referrer

        });

});

Где hitType — тип события, eventCategory — категория, eventAction — адрес ошибки, url_referrer — откуда на 404 страницу попали.

Отчёт в Гугл.Аналитикс: Поведение -> События -> Обзор.

Подробнее о настройке событий в Аналитикс: https://support.google.com/analytics/answer/1033068?hl=ru

Как использовать полученные данные?

Если ошибки 404 внутри сайта — исправьте все ссылки на правильные или уберите вовсе. Если эти ссылки с внешних ресурсов? и Вам никак не повлиять на них, то поставьте 301 редирект на максимально релевантные страницы. Любите своих клиентов и не заставляйте их думать или что-то искать на Вашем сайте.

Опубликовано в Оптимизация