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


Случается такое, что веб-страница или весь сайт целиком переезжает на новый URL-адрес навсегда. В этом случае необходимо прописывать 301 редирект. Что это? 301 редирект — это перенаправление посетителей и поисковых роботов с одного URL-адреса на другой.

301 редирект обычно прописывается в следующих случаях:

  1. при склеивании зеркал сайта с www и без www;
  2. при переезде сайта на новый домен;
  3. при переносе сайта на новую CMS;
  4. при изменении URL-адресов страниц;
  5. при устранении дублей страниц сайта.

Как ни странно, последний случай рассматривают крайне редко, хотя при устранении дублей 301 редирект помогает как никто другой, если, конечно, у вас нет желания ковырять код самой CMS. А если вы занимаетесь поисковой оптимизацией сайтов, то вопрос наличия или отсутствия дублей у страниц сайта обязательно должен вас волновать.

301 редирект замечателен тем, что он передает pr-страниц и тИЦ сайта, а соответственно и ссылочный вес новому URL. Но зато он не передает наложенные на старый домен санкции со стороны поисковых систем, что вдвойне приятно.

Итак, с тем, что такое 301 редирект, разобрались. Перейдем непосредственно к тому, как его сделать.

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

Для начала я приведу список операторов регулярных выражений, которые пригодятся вам при настраивании 301 редиректов.


  • ^ — ограничение слева;
  • $ — ограничение справа;
  • * — 0 и более символов;
  • + — 1 и более символов;
  • . — любой символ;
  • — экранирование;
  • () — переменная;
  • [] — диапазон значений.

Существуют различные способы того, как сделать 301 редирект. Лично я, как и многие другие вебмастера, настраиваю его через файл .htaccess. Данный файл есть практически у каждой популярной CMS, и находится он в корне вашего сайта. Скачать .htaccess можно через FTP при помощи клиента FileZila:

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

Файл .htaccess следует открыть текстовым редактором, к примеру, Notepad++. Поверх всех кодов редиректов вам следует прописать следующую строку:

  RewriteEngine On  

В противном случае редиректы работать не будут.


Многие ошибочно полагают, что можно обойтись и без 301 редиректа. Я могу вам сказать, что он необходим при оптимизации практически каждого сайта. К примеру, абсолютно каждый сайт изначально доступен по двум адресам — с www и без www. Беда в том, что это приводит к размыванию ссылочной массы. Объясню почему. Другим сайтам абсолютно все равно, какой из двух вариантов написания вашего домена является основным. Если они будут ставить на вас ссылки, то в адресе могут прописывать как вариант с www, так и без www. Ссылочная масса в итоге будет размыта, а поисковики в любом случае будут индексировать только один вариант. Когда-то так они вообще воспринимали их как совершенно разные сайты.

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

С www на без www:

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

С без www на www:

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

Если приведенные выше коды редиректа не сработают, то воспользуйтесь следующей записью для редиректа с www на без www:

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

Помните, что вместо site.ru нужно прописывать домен вашего сайта. После проделанных действий сохраните файл .htaccess и закачайте его на сервер, заменив им старый файл.


301 редирект очень часто выручает меня, когда я борюсь с дублями страниц сайта. А это я делаю практически каждый раз, когда выполняю внутреннюю оптимизацию очередного сайта. Лично я еще не встречал CMS, которая бы не генерировала дубли. Хотя если речь идет о небольшом сайте, то бывают исключения. Понятия не имеете, о чем я сейчас говорю? Тогда подписывайтесь на обновления, вскоре я напишу о дублях целую статью.

Бывает такое, что страница сайта доступна сразу по двум URL-адресам вида: http://site.ru/category/page.html и http://site.ru/page.html. В данном случае идет речь о дублях. К примеру, мы хотим, чтобы страница была доступна только по адресу второго вида. В таком случае для избавления от дубля необходимо прописать следующий редирект:

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

Теперь представьте ситуацию, что вы изменили адрес страницы сайта. Для чего? Да, могут быть самые разные причины. Я, к примеру, совсем недавно это делал с целью укорачивания длины URL. Для этого вам понадобится следующий редирект:

  RewriteRule ^(.*)old-page.html$ http://site.ru/new-page.html [R=301,L]  

Если приведенный выше код редиректа не сработает, попробуйте следующий:


  RewriteRule ^old-page.html$ http://site.ru/new-page.html [R=301,L]  

Или такой:

  RewriteRule ^old-page.html$ /new-page.html [R=301,L]  

Если требуется сделать редирект со старого URL-адреса на кириллице на новый URL-адрес (хоть на кириллице, хоть на латинице), то запись будет иметь вид:

  RewriteRule ^старый-урл.html /new-page.html [R=301,L]  

Как вы понимаете, выше мы рассматривали редиректы с одного URL на другой в пределах одного сайта. Для этого мы использовали mod_rewrite и директиву RewriteRule. Но можно обойтись и более простым вариантом записи редиректа при помощи директивы Redirect:

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

Оба варианта записи редиректа корректны и передают ссылочный вес и другие показатели. Они отличаются лишь тем, что используют директивы разных модулей, и поэтому имеют различный синтаксис. При использовании директивы Redirect сначала прописывается старый адрес страницы без http://site.ru, а затем новый адрес полностью.

301 редирект может вам понадобиться при переезде сайта со старого домена на новый:

  RewriteEngine on  RewriteCond %{HTTP_HOST} ^www.old-domen.ru$ [NC]  RewriteRule ^(.*)$ http://new-domen.ru/$1 [L,R=301]  RewriteCond %{HTTP_HOST} ^old-domen.ru$ [NC]  RewriteRule ^(.*)$ http://new-domen.ru/$1 [L,R=301]  

Аналогичный редирект с использованием директивы Redirect:


  Redirect 301 / http://new-domen.ru  

Можно прописать 301 редирект URL с параметром на любую другую страницу сайта, к примеру, главную:

  RewriteCond %{QUERY_STRING} ^cPath=373_703  RewriteRule ^index.php$ http://site.ru/? [L,R=301]  

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

Редирект с site.ru/index.php на site.ru (избавляемся от дубля главной страницы):

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

В результате наличия у главной страницы сайта дубля вида site.ru/index.php аналогичные дубли могут появляться и у внутренних страниц сайта, к примеру, site.ru/index.php/page.html является дублем страницы site.ru/page.html. В данном случае все дубли такого вида разом можно устранить при помощи редиректа:

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

Если у главной страницы вашего сайта есть дубль вида site.ru/main.html, то следует прописать следующий редирект:


  RewriteEngine On  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /main.html HTTP/  RewriteRule ^main.html$ http://vash-sait.ru/ [R=301,L]  

или же такой вариант:

  Redirect 301 /main.html http://site.ru/  

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

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

Если же наоборот вы хотите, чтобы все внутренние страницы сайта имели адрес без .html на конце, то есть адрес вида site.ru/page, то следует прописать редирект:

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

Если стоит задача редиректа с URL-адресов с .htm на конце на адреса с .html на конце, то в .htaccess следует добавить следующую запись:

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

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


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

Если задача полностью противоположная, и требуются редиректы с URL-адресов со слэшем на конце на адреса без суффикса, то добавьте следующий код:

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

Чтобы прописать редирект с URL-адреса с параметром вида http://site.ru/?page_id=111, добавьте в .htaccess следующее:

  RewriteCond %{QUERY_STRING} page_id=111  RewriteRule ^ http://site.ru/new-page/ [R=301,L]  

Также совсем недавно столкнулся с сайтом, для которого был получен сертификат о его безопасности, и было необходимо прописать редирект с http на https:

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

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

Как проверить 301 редирект


301 редирект проверяется очень просто. Все, что вам нужно, это ввести в строке браузера старый адрес страницы. Если произойдет перенаправление на новый URL-адрес, то скорее всего редирект прописан верно. В некоторых случаях перед тем как проверить 301 редирект, приходится чистить кэш браузера. Поэтому если перенаправление не происходит, возможно, вы забыли это сделать.

Чтобы окончательно убедиться в том, что 301 редирект настроен верно, рекомендую также проверить ответ сервера при помощи специальных сервисов, к примеру, 2ip.ru, а еще лучше воспользуйтесь программой Netpeak Spider, при помощи которой можно узнать еще и много другой информации о сайте. Ответ сервера должен быть «301 » или же «301 MovedPermanently -> 200 OK».

Надеюсь, теперь Вы поняли, как правильно настраивать 301 редирект. Выше я привел достаточное количество различных примеров. Если не сработает один тип записи редиректа, скорее всего сработает другой. Пробуйте. От чего зависит, какая именно запись редиректа сработает, точно сказать не могу, так как не являюсь программистом. Возможно, от CMS или настроек сервера. Также иногда влияет расположение кода редиректа в файле .htaccess. Если редирект не срабатывает, попробуйте перенести его код чуть выше по файлу. На этом у меня все. Успехов в оптимизации сайтов!

yaroslaff.su

Как настроить 301 редирект? Редирект .htaccess


Мы с вами будем рассматривать 301 редирект через .htaccess. Htaccess является служебным файлом конфигурации, который скрывает в себе массу возможностей. С помощью него можно запретить доступ к отдельным каталогам, указать кодировку страниц, установить защиту файлов и папок, сделать 301 редирект и т.д.

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

Если вдруг в корневом каталоге вашего сайта не окажется данного файла, создайте его самостоятельно. Самый простой способ создания файла .htaccess, воспользоваться FTP — клиентом FileZilla (о нем я писал здесь):

301 редирект html

Для этого перейдите в корневой каталог своего блога, нажмите в пустом поле правую кнопку мыши/Создать новый файл/Введите имя файла/.htaccess/ОК. После этого файл будет доступен для редактирования. Открыть его можно любым текстовым редактором, например Нотепад++.

Но бывают случаи, когда ftp — менеджер скрывает системные файлы, в том числе и .htaccess. Поэтому, если вы не обнаружите файл в корневом каталоге, не торопитесь его создавать. Для начала проверьте его наличие в скрытых файлах.


Для этого перейдите во вкладку «Сервер» и установите галочку напротив пункта «Принудительно отображать скрытые файлы». Если и в этом случае вы не найдете файл .htaccess, то тогда создайте его.

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

Начнем с самого главного!

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

Дело в том, что у любого ресурса в сети, один из вариантов доменного имени (с www или без www) должен быть главным. Вот простой пример относительно моего блога. Главным его доменом является http://blogiseo.ru, а www.blogiseo.ru — является его зеркалом. Главное зеркало блога, прописывается в файле robots.txt для Яндекса в виде директивы Host.

Если у вас нет файла robots.txt, обязательно изучите вот эту статью, там я все подробно расписал. Robots.txt в обязательном порядке должен присутствовать на каждом ресурсе. Иначе блог обречен на неудачу! Помимо robots.txt, вам необходимо указать главное зеркало сайта в Яндекс.Вебмастер.

Но так как в robots.txt оно уже указано, то я вам рекомендую оставить все на усмотрение робота. Для этого перейдите во вкладку «Настройки индексирования/Главное зеркало» и поставьте кругляшек напротив пункта «На усмотрение робота»:

301 редирект html

Для того, чтобы воспользоваться данной функцией, вы должны быть зарегистрированы в Яндекс.Вебмастер. О том, как это сделать я писал тут. До недавнего времени в панели инструментов для веб-мастеров Google, была похожая функция, где указывался основной домен, но после внесения последних изменений разработчиками, она исчезла.

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

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

Что касается приставки www, то она давным-давно должна была отмереть. Но так как в сети до сих пор существует множество ресурсов с префиксом www, то она имеет место быть. Для поисковых систем http://blogiseo.ru и www.blogiseo.ru это два абсолютно разных адреса! Да и пользователи частенько в строку браузера вбивают адрес ресурса именно с www, поэтому отмирать ей пока рановато. Исходя из этого, настройки зеркала, просто необходимы!

Последствия от неверной настройки зеркала

На самом деле, их не так уж и много, я выделил всего лишь два основных пункта. Но, их весомость заставит многих новичков серьезно задуматься…

1. Все внешние ссылки будут распределяться между адресами с www и без www, в зависимости от того, как на вас будут ссылаться сторонние ресурсы или пользователи. Получается, что ваш блог будет лишен части ссылок, что отрицательно скажется на его продвижении и посещаемости. Но это не самое страшное!

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

Естественно, вы об этом даже и не догадываетесь и продолжаете развивать свой ресурс. Со временем он обрастет уникальным контентом, естественными ссылками и комментариями. Дела идут в гору, ну как тут не радоваться? Но вот беда! Поисковые системы, наблюдая за сайтом без приставки www, поставили на нем клеймо, за не уникальность! В итоге он перестанет индексироваться, а со временем полностью выпадет из индекса!

Вот это будет страшно и очень обидно! И чтобы избежать таких печальных ситуаций и был придуман 301 редирект.

Перенаправление с домена с www на без www и наоборот

Как настроить 301 редирект в этом случае? Все очень просто. Открываем файл .htaccess и копируем в него представленный ниже код.

Перенаправление с www на без www:

и наоборот:

Обратите внимание, что вместо vashdomen, в обоих случаях нужно указать доменное имя своего блога!

Сохраните файл .htaccess и переместите его обратно в корневой каталог с заменой старого файла. Теперь, как бы пользователь не вбивал адрес вашего блога в строку браузера (хоть blogiseo.ru, хоть www.blogiseo.ru, хоть http://www.blogiseo.ru), его в любом случае перенаправит на главную страницу.

Переезд с одного домена на другой

Аналогичной схемой редиректа 301, приведенной выше, можно воспользоваться при переезде с одного домена на другой. Но все же для наглядности приведу пример. Вы переезжаете с домена sait-1.ru на домен sait-2.com. В этом случае прописываем в файле .htaccess следующее:

Редирект при изменении ЧПУ ссылок

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

Приведу простой пример. Вы решили изменить название страницы. Старое имя страницы имело вид obo-mne.html, новое имя ob-avtore.html. В этом случае вам нужно будет прописать в файле .htaccess следующую конструкцию:

Редирект при изменение расширения файла

Снова пример. Вам потребовалось изменить расширение файла stranica.html на stranica.php. Аналогично предыдущему пункту, прописываем в системном файле следующую строку:

Редирект для партнерских программ

Допустим, вы решили перенаправить пользователя на страницу с партнерской программой. Код партнерки выглядит следующим образом: http://www.partnerka.ru/?ref=35677. Увидев такую ссылку, большинство пользователей не будут по ней переходить, заранее зная о ваших намерениях.

Для того, чтобы ссылка приняла привлекательный вид, вам необходимо создать отдельную страницу, например dlya-partnerov.html, с которой и будет идти перенаправление пользователя на страницу с партнерской программой. Теперь останется разместить ссылку на страницу vashdomen.ru/dlya-partnerov.html, а в файле .htaccess прописать следующее:

Но лично я для таких целей предпочитаю пользоваться несложным скриптом, о котором рассказывал в этой статье (способ №3).

На этом пожалуй все. Теперь вы знаете, как настроить 301 редирект и у вас не должно возникнуть с этим проблем. Я вам показал наиболее простой вариант 301 редиректа через .htaccess, о котором желательно знать каждому веб-мастеру. Ну и последнее, что хочется сказать, всегда проверяйте редиректы на работоспособность. На этом все, всем пока!

blogiseo.ru

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

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 включает или выключает работу механизма преобразования:

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

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

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

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

 

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

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

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

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

  • 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, но и все беды, от которых вы бежали.

semantica.in

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

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
  • При составлении файла .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-адреса и строка считается окончательной.

canwas.ru

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

Начнем с 301 редиректа. Во-первых, он представляет из себя автоматическую переадресацию с одного адреса на другой. Он вполне может применяться в том случае, когда сайт переводится с протокола http на https, когда сайт перенастраивается с «полноразмерных» адресов на ЧПУ (т.е. было https://www.karcher.xyz/content/news/31-01-2017/razdatka, стало https://www.karcher.xyz/ razdatka), а также для «склеивания» страниц-дублей. Во-вторых, 301 редирект сообщает поисковым системам, что «ребята, имеющийся у вас адрес уже не работает, поэтому идите вон туда», а они такие «ОК, учтем». Таким образом, переадресация происходит безболезненно, без потери позиций и ссылочной массы.

Но что будет, если «Ой, да ну нафиг? Буду я еще с переадресациями заморачиваться, только время потеряю!»? Можно сделать и так, НО… история «старой» страницы будет утрачена, а «новая» будет ранжироваться «с нуля». Как следствие – потеря позиций и ссылочной массы (это в лучшем случае).

Варианты применения 301 редиректа:

  • Склейка доменов;
  • Переезд сайта на другой адрес (может пригодиться при попадании сайта под какие-либо фильтры);
  • Для увеличения показателей тИЦ, PR и увеличения трафика при покупке другого домена (настраивается редирект на ресурс, который нуждается в поднятии тИЦ и PR);
  • При смене движка сайта (в этом случае настройка 301 редиректов строго обязательна, в противном случае гарантирована полная потеря трафика);
  • при переезде с http на https;
  • склейка «дублей»

и т.д., всех причин не перечислить.

301 Редирект при смене домена основного сайта

Итак, Вы решили сменить домен. Сразу же даем готовое решение:

  • переделываем robots.txt на старом домене. Готовый текст файла:

User-agent: Yandex

Disallow:

Host: newsite.com

  • настраиваем 301 редирект для всех страниц сайта (кроме файла robots.txt) с помощью приведенного ниже кода:

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

Всё!

301 редирект при смене адреса страницы

Постраничный редирект (когда меняется адрес страницы) осуществляется с помощью приведенного ниже кода:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.stokrat.org$ [NC]

RewriteRule ^stranica/nastrojka-301-redirekta/$ https://www.stokrat.org/newpage/ [R=301,L]

Именно этот код используется при «переезде» страниц, например, на ЧПУ.

Настроить редирект с www на домен без www в htaccess

Упоминание www. в адресе домена уже давно не является актуальным. Тем не менее сайтов с www. полно. Склеивание доменов с www. и без должно производиться в строго обязательном порядке, т.к. поисковые системы воспринимают эти 2 домена как 2 разных сайта с разными тИЦ, PR, посещаемостью, ссылочной массой и всем остальным. Следовательно, один из них – оригинал, а второй – «самозванец» с «ворованным контентом». Чтобы этого не происходило – домены с www. и без необходимо «склеить» с помощью 301 редиректа. Код настройки приведен ниже.

Код редиректа с www на без www в htaccess выглядит так:

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

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

RewriteEngine on/off – если выражаться простым человеческим языком – она служит выключателем 301 редиректа.

RewriteCond — в этой директиве прописываются условия для «срабатывания» следующей директивы.

RewriteRule — директива преобразования одного адреса в другой.

Настроить редирект с http на https в htaccess

Переезд с http на https многие считают «современным трендом». Однако, на сегодняшний день данная мера является обязательной (хотя формально она таковой не является). И вот настал тот час, когда Вы получили SSL-сертификат, Ваш сайт уже работает и по http и по https. Все что осталось настроить в файле .htaccess 301 редирект с http- на https-версии страниц сайта. Код для настройки приведен ниже.

RewriteCond %{SERVER_PORT} !^443$

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

А вот код для обратного редиректа (т.е. с https на http). Как видите, отличие всего в 1 символ:

RewriteCond %{SERVER_PORT} !^443$

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

Редирект со страниц index.php, index.html

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

Поскольку в подзаголовке упомянуты index.php и index.html – Вы уже догадались, что с помощью 301 редиректа мы будем избавляться от дублей главной страницы:

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

RewriteRule ^index.php$ http://site.ru/ [L,R=301]

Однако, если у главной страницы есть дубль вида site.ru/index.php, вполне вероятно, что и у остальных страниц есть дубли вида site.ru/index.php/page.html (при оригинальном адресе site.ru/page.html). Это плохо, поэтому также требуется настройка 301 редиректа с помощью приведенного ниже кода:

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

Нередки случаи, когда у главной страницы есть дубль вида

site.ru/main.html, для которого так же необходимо прописывать 301 редирект на site.ru:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /main.html HTTP/

RewriteRule ^main.html$ http://vash-sait.ru/ [R=301,L]

Либо альтернативный вариант:

Redirect 301 /main.html HYPERLINK «http://site.ru/» http://site.ru/

А вот теперь рассмотрим обратную ситуацию – когда Вы хотите склеить дубли, настроив редирект с site.ru на site.ru/main.html. Сделать это можно с помощью приведенного ниже кода.

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|?)

RewriteRule .* %1.html [R=301,L]

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

Ну а если Вам важно, чтобы адреса всех внутренних страниц отображались без .html на конце, то редирект настраивается вот таким кодом:

RewriteCond %{REQUEST_URI} .html$

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

Теперь о настройке редиректа со страниц .htm на страницы .html. Для настройки такого редиректа достаточно добавить в .htaccess следующий код:

RewriteBase /

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

Редиректы с адресов со слэшами в конце и без них

Для начала рассмотрим еще один вид дублей страниц – страницы вида http://site.xyz/page и http://site.xyz/page/ — кроме слэша в конце, они ничем не отличаются. Настраивать редирект можно и с первой на вторую, и со второй на первую. Рассмотрим оба варианта:

Редирект с http://site.xyz/page на http://site.xyz/page/:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !..+$

RewriteCond %{REQUEST_URI} !/$

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

Редирект с http://site.xyz/page/ на http://site.xyz/page:

RewriteCond %{REQUEST_FILENAME} !-d

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

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

Причем абсолютно не важно, будет ли у Вас после редиректа слэш в конце адреса или нет. Главное – чтоб эти адреса были склеены с помощью 301 редиректа.

Редирект на мобильную версию сайта

Разумеется, если Ваш сайт работает на движке WordPress или Joomla, то настроить редирект на мобильную версию сайта можно с помощью плагинов.

Однако, Google является сторонником адаптивного дизайна. Следовательно, выделять отдельный домен/поддомен для мобильной версии не нужно. Т.е. в Google утверждают, что «если есть возможность обойтись без редиректов на мобильную версию – именно так и нужно поступать».

Но что делать, если без таких редиректов все-таки не обойтись?

Можно настроить редирект через файл .htaccess

RewriteEngine On

RewriteCond %{HTTP_ACCEPT} «text/vnd.wap.wml|application/vnd.wap.xhtml+xml» [NC]

RewriteCond %{REQUEST_URI} ^/$

RewriteRule ^ http://m.domain.com%{REQUEST_URI} [R,L]

Настройка мобильного редиректа через PHP

Необходимо воспользоваться специальной библиотекой Mobile Detect, она необходима для того, чтоб распознать, с мобильного устройства пришел пользователь, или со стационарного.

<?

$detect = new Mobile_Detect;

if ( $detect->isMobile() ) {// код}

if ( $detect->isTablet() ) {// код}

if ( $detect->isiOS() ) {// код}

if ( $detect->isAndroidOS() ) {// код}

?>

Из этого кода становится очевидно, что можно распознать не только компьютер/смартфон/планшет, но и его операционную систему.

JavaScript редирект

С помощью приведенного ниже кода происходит переадресация на мобильный поддомен. Основанием для переадресации служит разрешение экрана – до 480 пикселей в ширину. Именно в ширину, не в высоту.

  1. <script type=»text/javascript»>
  2. if (screen.width <= 480) {
  3. window.location = «http://m.domain.com»;
  4. </script>

Однако, это не совсем верный способ, т.к. столь низкое разрешение далеко не у всех смартфонов, даже бюджетных. Гораздо правильнее заменить в коде число 480 на 720, большинство современных смартфонов имеет разрешение не менее, чем 1280 пикселей в высоту и 720 в ширину.

302 редирект

302 – это временная переадресация (по сути, это единственное отличие от 301 редиректа). Но где она может применяться?

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

Т.е. есть постоянный адрес (например, https://inet-market.xyz/sales/) и сегодня с него происходит редирект на страницу https://inet-market.xyz/sales/december/, т.е. на страницу с декабрьскими акциями. Ну а через несколько дней редирект перенастраивается на https://inet-market.xyz/sales/new-year/, т.е. на страницу с новогодними акциями.

И в таких ситуациях 302 редирект не только уместен, но и является самым правильным решением.

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

Основные причины применения 302 редиректа:

  • Когда основная страница находится на стадии разработки/доработки/редактировании, поэтому ее надо скрыть от глаз посетителей, настроив временный редирект на другую страницу.
  • Когда требуется, чтобы индексировалась и та страница, с которой происходит перенаправление, и та страница, куда перенаправляют;
  • Когда требуется, чтобы в данный момент пользователи видели именно новую страницу, а не старую (например, если в будущем планируется «возвращение» к «старой» странице);
  • Когда индексирование конечной страницы практически в будущем перестанет играть свою роль (т.е. когда страница создается временно);
  • «Конечная» страница будет периодически меняться.

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

Как проверить правильно ли настроен редирект

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

ВАЖНО! Перед тем как делать выводы о том, что «что-то тут не так», почистите кэш браузера и повторите попытку.

Другой способ – воспользоваться онлайн-сервисами по проверке кода ответа сервера. Например, http://4web.su/s_redirect/. Вводим имя домена и проверяем код ответа. Если редирект настроен правильно, то код ответа будет либо 301, либо 302 (в зависимости от того, какой именно редирект Вы настраивали). На некоторых сервисах (кстати, 4web.su – один из них) может отображаться еще и код, который сервер отдает уже после переадресации. Единственный допустимый код в этом случае – 200 ОК.

В данном случае мы попытались проверить как работает http-версия нашего сайта. Во-первых, мы получили сообщение о том, что у нас настроен 301 редирект (т.е. постоянный), новый адрес (https-версия сайта), а также отображены 2 кода ответа — 301 Moved Permanently и 200 ОК.

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

Если же вместо 200 ОК вылезает код 404 (как на приведенном ниже скриншоте) – значит редирект настроен неправильно.

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

Как сделать редирект без .htaccess

Большинство программистов настраивает редиректы путем прописывания ранее приведенных кодов в файле .htaccess. Основной минус такого подхода в том, что можно неплохо «накосячить», т.е. код в файл внесли, но он почему-то не срабатывает (или срабатывает, но неправильно). Причины могут быть самыми разными – возможен косяк в самой CMS, либо код на редирект должен располагаться выше/ниже, и т.д., вариантов масса. Поэтому существуют и альтернативные способы настройки редиректа. Например, PHP или JavaScript.

PHP редирект

Во-первых, PHP-это сервероориентированный язык.

Во-вторых, редирект будет происходить на сервере, а не в браузере пользователя.

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

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

PHP-редиректы необходимо оформлять в отдельные php-файлы.

Код редиректа на примере файла index.php:

<?php

header («Location: https://stokrat.org/», TRUE, 302);

?>

или

<?php

header («Location: https://stokrat.org/», TRUE, 301);

?>

В зависимости от того, 301 редирект Вы хотите настроить, или 302. С помощью PHP обычно настраивается 302 редирект.

Простейший javascript-редирект

Основной минус данного способа в том, что не у всех (но у большинства) пользователей включен в браузере JavaaScript. Если JavaScript в браузере отключен – редиректа не произойдет.

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

Оформляется редирект в <body> либо в <head>:

<script type=»text/javascript»>

document.location = ‘https://stokrat.org/’;

</script>

ВАЖНО!!! Данный код в любом случае сработает быстрее, чем код Яндекс.Метрики, а это значит, что Яндекс до редиректа посетителя не засчитает.

Настроить 301 редирект в WordPress

Ранее мы уже говорили, что в WordPress удобнее всего настраивать редиректы с помощью плагинов. О них и поговорим.

Плагин Redirection. Это самый популярный плагин для настройки редиректов. Он почти никогда не жаловался на «извините, у меня с новой версией движка несовместимость», а если и жаловался – то разработчики в считаные часы вносили в плагин все необходимые для совместимости изменения. Число скачиваний уже перевалило за несколько миллионов.

Число редиректов, которые через него можно настроить, не ограничено. Плюс бонусом можно отслеживать статистику по настроенным с помощью этого плагина редиректам и даже отслеживать ошибочные перенаправления (когда после редиректа отдается код не 200 ОК, а 404 Not Found).

Единственный минус этого плагина в том, что он англоязычный. Но разобраться с настройкой редиректов крайне просто: указываем адрес, откуда будет происходить переадресация, указываем адрес, куда надо переадресовать, выбираем из списка код ответа, добавляем комментарий (при необходимости) и сохраняем. Готово!

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

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

Если этот плагин чем-то не устраивает, можно рассмотреть альтернативный — Safe Redirect Manager (разработчик – компания 10up). Принципиально ничем не отличается.

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

Не грех упомянуть Simple 301 Redirects, но он необходим исключительно для настройки 301 редиректа.

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

Настройка редиректов в Joomla

Самое ужасное – получение битых ссылок «из ниоткуда». «Да как так-то? Еще вчера все отлично работало! Почему теперь страница не найдена?». Это связано с тем, при обновлении контента, добавлении товаров/продуктов, либо по каким-то иным причинам, адреса могут меняться. И что делать? Правильно – настройка 301 редиректа будет единственным правильным решением. Как и в WordPress, в Joomla данный вопрос решается путем работы с плагинами, т.е. без вмешательства в .htaccess.

И сразу же конкретный пример, когда такое может произойти. Интернет-магазины на Joomla – это не редкость. И вот в магазин поступил новый смартфон, какой-нибудь Gopo Center C4. Менеджеры создают под него карточку товара, затем заказывается реклама и делается рассылка, а затем директор магазина говорит менеджеру «А почему в заголовке не указали, что он в черном и белом цвете? Исправить!», менеджер вносит исправления, вследствие чего адрес ссылки меняется. Итог – вся реклама и рассылка превращается в пустой слив бюджета, т.к. прошлая ссылка уже не работает. И вот тут есть 2 выхода – откорректировать адрес ссылки вручную (на сайте интернет-магазина, но это отдельная тема для разговора), либо настроить 301 редирект со старого адреса на новый.

Теперь о том, как решить эту проблему через 301 редирект.

1. Необходимо убедиться, что редирект-плагин включен.

Для этого в админке выбираем Расширения => Менеджер плагинов.

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

Ищем в списке установленных плагинов «Система – Перенаправление» и включаем (если он выключен).

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

2. Проверяем «плохие» адреса.

В верхнем меню переходим в Компоненты => Перенаправление, там будет список всех “плохих” URL вашего Joomla-сайта.

3. Настраиваем редирект.

Выбираем URL, с которого нужно сделать переадресацию, затем в “URL назначения» вводим новый адрес (разумеется рабочий), при необходимости добавляем комментарий, убеждаемся, что установлен статус «Включено» и сохраняем изменения.

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

Т.е. для решения данной задачи хватает стандартного плагина Joomla, который идет с движком «с завода».

Настройка редиректа на OpenCart

Формирование адресов на OpenCart – это очень больная тема. А чтобы Вам было проще понять, насколько она на этом движке большая, просто взгляните на то, какой вид имеет адрес главной страницы:

site.com/index.php/?route=common/home

И это вместо site.com

Почему разработчики так эту проблему не решили – не понятно. Видимо, в этих «хвостах» зашифрованы послания тем, кто пытается через тайну Вселенной постичь тайну сокровищ Майя. Но т.к. среди простых землян таких нет (или есть?), то проблема перекладывается с разработчиков движка на программистов сайта.

Решить проблему можно несколькими способами:

Способ 1. В папке templates/common найти файлы header.tpl и footer.tpl и произвести в них замену кода с <?php echo $home; ?> на <?php echo $base; ?>

Способ 2. Настройка редиректа на site.com через .htaccess, вставив вот этот код:

RewriteCond %{QUERY_STRING} ^route=common/home$

RewriteRule ^index.php$ http://site.com/? [R=301,L]

Таким же (а именно – вторым) способом можно настроить редиректы со старых адресов категорий на новые. По умолчанию адреса ссылок в OpenCart выглядят примерно следующим образом:

site.com/index.php?path=83_94_113&route=product/category

На такие ссылки смотреть очень больно, причем в прямом смысле, т.к. глаза реально начинают болеть при виде таких адресов. В том же .htaccess можно настроить редирект на «человеческие» адреса вида site.com/category с помощью такого кода:

RewriteCond %{QUERY_STRING} ^path=83_94_113&route=product/category$

RewriteRule ^index.php$ http://site.com/new-category? [R=301,L]

Но что делать с динамическими адресами, которые из-за привязки к определенной секции имеют вид site.com/katalog?c=okna-pvkh?

Программисты довольно долго искали решение. «Методом тыка» (точнее — проб и ошибок) решение было найдено. В данном случае происходит редирект на главную страницу сайта:

RewriteCond %{QUERY_STRING} ^c=okna-pvkh$ [NC]

RewriteRule katalog http://site.com/? [R=301,L]

Примечания и ошибки

Теперь поговорим о том, как не допускать ошибок при настройке 301 редиректа:

  • Нельзя нарушать последовательность правил переадресации. После настройки редиректа необходимо убедиться, что настройка не дала каких-либо «побочных эффектов». Если нарушить последовательность правил, то ранее настроенные редиректы могут либо прекратить функционировать, либо функционировать неправильно. Противоречий в правилах быть не должно.
  • Не стесняйтесь пользоваться официальными мануалами, т.к. у 301 редиректа из-за непростого синтаксиса есть множество особенностей. Упустить какой-то нюанс при настройке – проще простого.
  • После очередных «допиливаний» ВСЕГДА проводите полную проверку работоспособности тех правил, которые были внедрены ранее. Настройка без проверки – это не настройка даже «для галочки». Один лишний символ может «обвалить» работу всего сайта, либо заставить его работать неправильно. За другими программистами нам уже не раз приходилось исправлять работу сайта, когда с адреса site.com/oldpage происходит 301 редирект на site.com/newpage, а затем с помощью того же 301 редиректа происходит переадресация обратно на site.com/oldpage и далее «по кругу».

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

Во-первых, «многоходовки», когда идет череда из нескольких 301 редиректов подряд. Гораздо правильнее настроить редирект сразу на «финишный» адрес.

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

В-третьих, редиректы «не туда». Т.е. если страница переехала с первого адреса на второй, а при настройке редиректа Вы ошибочно указываете адрес совершенно другой страницы.

В-четвертых, редирект на страницу, которая работает по каким-то причинам очень некорректно. Страница должна работать стабильно и отдавать либо код 200, либо код 404.

В-пятых, редирект файла robots.txt. Это запрещено правилами многих поисковых систем. Более того, многие допускают одну и ту же ошибку – при переходе на https настраивают 301 редирект с http://site.xyz/robots.txt на https://site.xyz/robots.txt. Файл robots.txt должен быть доступен по обоим адресам без всяких редиректов. Ровно то же самое касается и xml-карты сайта.

Источник

pozi.pro


You May Also Like

About the Author: admind

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

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

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