Редиректы 301 через .htaccess

Содержание:

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

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$ 
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)\/$ http://%1/$1

Зачем нужен редирект

На сайтах он решает несколько задач. Чаще всего он перенаправляет посетителя со страниц с неактуальным адресом или информацией, однако этим его функционал не ограничивается.

Редирект для целей SEO

В поисковой оптимизации сайтов используется для:

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

Где находится .htaccess

Можно с легкостью проверить, есть ли у вас служебный файл. От многих других документов он отличается тем, что имеет только расширение в виде названия из слова, тогда как самого названия нет. Да, мы все привыкли видеть файлы с названием из слова, и расширением после точки, которое состоит всего из 2-3 букв. Но пустые названия позволяют делать файлы и папки «скрытыми», с открытым исходным кодом. Из этого следует вывод, что .htaccess для обычных пользователей остается невидимым, поэтому они не смогут его изменить.

Но есть у этого метода «скрытия» файла и обратная сторона медали. В стандартных FTP-клиентах на ОС Windows и Mac, документ очень часто остается невидимым для пользователей, из-за чего они ошибочно полагают, что его просто нет. Поэтому человек создает новый файл для внесения своих конфигураций, кодов для обработки ошибок, создания доступа к папкам и пр. Хорошо, что большинство хостингов оставляют место на диске, где htaccess-файл уже установлен автоматически.

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

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

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

Примеры 301 редиректов в .htaccess

Мы уже рассматривали множество примеров с редиректом по .htaccess в статьях:

  • 301 редирект для удаления/добавления слэша в конце URL;
  • 301 редирект с index (.html и .php) на корень сайта «/»;
  • Редирект 301 с http на https;
  • Редирект 301 с www на без www;
  • Смена адреса сайта — редирект со старого домена на новый;

Здесь мы дополним варианты редиректов, которых ещё не было.

Редирект с site.ru/cat/oldpage на site.ru/newpage.html

2.4. Удаление лишних слэшей в адресе URL

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

2.5. Реврайт без редиректа

Можно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html, а в адресной строке будет отображаться адрес /news/happy

2.6. Простановка замыкающего слеша в конце адреса главной страница

Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru. Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/

Например, для редиректа со страницы site.com/directoriya/stranica.html на site.com/stranica.html нужно прописать следующее:

2.9. Редирект на мобильную версию сайта m.site.ru

В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT}, далее происходит замена адреса сайта на m.URL

Коды 3хх редиректа

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

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

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

303 – смотри дугой ресурс – заращиваемый ресурс не найден, но это следует заращивать с использованием метода GET. То есть это редирект используется, если нужно менять метод запроса (GET, POST, HEAD).

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

305 – используй прокси – то есть доступ к ресурсу может быть организован только через прокси-сервер.

306 – на данный момент не используется.

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

По большому счёту наиболее часто можно встретить 301 и 307 редирект. Остальные используются постольку-поскольку.

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

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1

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

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

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

RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI}

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

RewriteCond %{HTTP:CF-Visitor} ‘»scheme»:»http»‘
# Without Cloudflare:
# RewriteCond %{HTTPS} off 
RewriteRule ^ https://www.example.com%{REQUEST_URI}

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

RewriteEngine on
RewriteCond %{HTTP:HTTPS}  !on
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

HTML перенаправления

Один из самых простых способов перенаправления – мета-тег refresh. Можно разместить этот мета-тег внутри тега

 в верхней части страницы HTML:

<meta http-equiv=”refresh” content=”0”; url=’http://new-website.com’ />

Атрибут content – атрибут задержки перед перенаправлением браузера на новую страницу, он установлен на 0 секунд

Не нужно устанавливать код состояния HTTP, но важно перепроверить написание кавычек выше (есть вложенные кавычки, поэтому лучше использовать разные типы кавычек)

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

Лучший вариант – перенаправление сайта с JavaScript.

Как работает функция редиректа

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

  • Пользователь переходит по имеющейся ссылке;
  • На сервер поступает запрос, который обрабатывается;
  • Если обнаружена настройка редиректа, то согласно ей пользователь перенаправляется на другой адрес;
  • Посетитель оказывается на странице, которую предварительно внесли в настройки.

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

  • Если используются страницы с отдельными ссылками, которые относятся к разным видам каталогов;
  • Для несуществующих сайтов и их страниц;
  • С файлом Robots.txt. Если вы решили перенести сайт на другой домен, то обязательно сохраняйте прежний файл в свободном доступе, чтобы старая и новая версия склеились быстрее;
  • При работе со страницами с несколькими адресами, которые относятся к разным каталогам.

Аналогичную функцию может выполнять тег rel=canonical. Большой плюс этого способа в том, что он помогает поисковикам быстро распознать новую ссылку в качестве основной, хотя сам тег не индексируется.

Цель использования 301-го редиректа

При помощи этого кода можно просто и эффективно провести переадресацию интернет-страницы с сохранением рейтинга. 301-й редирект стоит прописать по нескольким причинам:

  1. чтобы сохранить собранные «сигналы» потребителей контента;
  2. передать новой веб-странице ссылочный вес;
  3. провести перенаправление трафика на нужный адрес;
  4. не остаться без своих клиентов после ребрендинга и изменения доменного имени;
  5. переместить страницы;
  6. склеить их (например, https и http, с префиксом www и без него);
  7. удалить продублированные страницы.

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

Перенаправление в htaccess через mod_rewrite

Если вам нужно что-то серьезное, то модуль Apache может сделать гораздо больше с точки зрения перенаправлений. Вот еще примеры:

Перенаправление со старой страницы на новую

RewriteRule ^/old-page/?$ /new-page/

1 RewriteRule^old-page?$new-pageR=301,L

Перенаправить все пути из старого домена в те же пути в новом домене

RewriteRule (.*) https://newdomain.com/$1

1 RewriteRule(.*)https//newdomain.com/$1

Перенаправить все пути из старого домена на домашнюю страницу нового домена

RewriteRule (.*) https://newdomain.com/

1 RewriteRule(.*)https//newdomain.com/

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

RewriteRule (.*) https://www.newdomain.com/%{REQUEST_URI}

1 RewriteRule(.*)https//www.newdomain.com/%{REQUEST_URI}

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

RewriteCond %{REQUEST_URI} ^/subdirectory/(.*)
RewriteRule (.*) https://example.com/%1

1
2

RewriteCond%{REQUEST_URI}^subdirectory(.*)NC

RewriteRule(.*)https//example.com/%1

Перенаправить URL с параметром запроса ID

RewriteCond %{QUERY_STRING} ID=(+)
RewriteRule ^/index\.php /newpath/?

1
2

RewriteCond%{QUERY_STRING}ID=(-9+)NC

RewriteRule^index\.phpnewpath?R=301,L

Перенаправить URL из подкаталога с параметром запроса ID

RewriteCond %{QUERY_STRING} ID=(+)
RewriteRule ^/subdirectory/index\.php /newpath/?

1
2

RewriteCond%{QUERY_STRING}ID=(-9+)NC

RewriteRule^subdirectoryindex\.phpnewpath?R=301,L

Удалить www из всех URL

RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule (.*) https://example.com/$1

1
2

RewriteCond%{HTTP_HOST}^www\.example\.com$NC

RewriteRule(.*)https//example.com/$1

Принудительный вывод www для всех URL

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) https://www.example.com/$1

1
2

RewriteCond%{HTTP_HOST}^example\.com$NC

RewriteRule(.*)https//www.example.com/$1

Перенаправление через mod_alias

Эти примеры показывают, как перенаправить из одного места в другое с помощью модуля псевдонимов Apache . Кроме того, вы можете изменить код состояния на любой другой (например, изменить с 301 на 302).

Перенаправить страницу в том же домене

Redirect 301 /page.php /page.html

1 Redirect301page.phppage.html

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

Redirect 301 /page.php https://example.com/page.html

1 Redirect301page.php https//example.com/page.html

Перенаправить весь сайт

Redirect 301 / https://example.com/

1 Redirect301https//example.com/

Перенаправить весь сайт в подкаталог

Redirect 301 / https://example.com/subdirectory/

1 Redirect301https//example.com/subdirectory/

Перенаправление из подкаталога на другой сайт

Redirect 301 /subdirectory https://example.com/

1 Redirect301subdirectory https//example.com/

Перенаправление с .html на .php

RedirectMatch 301 (.*)\.html https://example.com/$1.php

1 RedirectMatch301(.*)\.html https//example.com/$1.php

Запретить доступ к странице

Redirect 403 /page.html

1 Redirect403page.html

Сообщите посетителям, что страница исчезла

Redirect 410 /page.html

1 Redirect410page.html

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

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

C http на https

Из-за повсеместного переезда на https необходимость в этом редиректе возникает у многих. Для настройки через файл htaccess или PHP нужно использовать следующий код:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI)

C или на www

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

Для выполнения настройки рекомендуется использовать специальные программы для генерации кодов редиректа, коих в Интернете существует множество, и сделать её через файл htacess.

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

Для выполнения этой операции действия нужно осуществлять по похожей схеме. Сначала сгенерировать код, после чего добавить его в файл htaccess или index.php. Если сайт работает на WordPress, можно воспользоваться плагинами, например, Simple 301 Redirects или Redirect.

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

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

Редирект папки

Можно задать и редирект для всей папки, то есть каталога. Это нужно, например, при создании подразделов, в том случае, если они отображаются в адресе страницы. Например, в раздел томаты на огородном сайте, имеющий ссылку примерного вида gardensampleblog.ru/tomaty/zheltye добавляется новый раздел «Томаты Черри», а ссылка получает следующий вид https://gardensampleblog.ru/cherry/zheltye.

Стандартный код для файла htacess в этом случае будет выглядеть следующим образом:

RedirectMatch 301 ^/tomaty/(.*)$ /cherry/$1

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

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1

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

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

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

RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP
RewriteRule ^index\.php$ http://site.ru/ 

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

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

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

RewriteCond %{HTTP_HOST} ^vash-sait.com$ 
RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ 
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://vash-sait.ru/$1 

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

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

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

RewriteCond %{HTTP_HOST} ^www.site\.ru$ 
RewriteRule ^(.*)$ http://site.ru/$1 

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

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

RewriteCond %{HTTP_HOST} ^site\.ru$ 
RewriteRule ^(.*)$ http://www.site.ru/$1 

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

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 

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

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ 

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

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 

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

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

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

RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2 

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

RewriteRule old-category /(.*) / old-category /$1 

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

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

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? 

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

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

RewriteRule ^((+/)*+)$ /$1.html 

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

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

Дополнительные настройки файла .htaccess

Постоянная переадресация может быть полезна в самых разнообразных ситуациях.

Направления к файлу ошибки 404. Для показа пути к нему используется такой код:

ЕrrоrDосumеnt 4О4 /4О4.рhр

Имейте в виду, что в файле .htaccess команды выполняются по очереди в том порядке, в котором они расположены.

Для РНР есть такая альтернатива:

<?рhр

hеаdеr(«НТТР/1.1 3О1 Mоvеd Реrmаnеntly»); — команда переадресации

hеаdеr(«Lоcаtіоn:

httр://www.prіmеr-sаіtа.соm/dіr/»)

еxіt()

?>

Код 403 для ответа сайтам с реф-спамом. В этом случае переадресация 301 производится по такому коду:

1-я строка – RеwrіtеСоnd %{НТТР_RЕFЕRЕR} rеf-spаm-prіmеr-sаіtа.ru

2-я строка – RеwrіtеСоnd %{НТТР_RЕFЕRЕR} аnоthеr-rеf-spаm.ru

3-я строка – RеwrіtеRulе .* —

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

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

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

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

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

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

RewriteCond   
RewriteCond   
RewriteRule   

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

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

LightTPD перенаправления

Для серверов, которые работают под управлением веб-сервера Lighttpd, можно сделать перенаправление, импортируя mod_redirect модуль и используя url.redirect:

server.modules = (

“mod_redirect”

)

$HTTP=~”^(www\.)?old-website.com$”{

    url.redirect = (

    “^/(.*)$” => “http://www.new-website.com/$1”,

    )

}

PHP перенаправления

В PHP можно использовать функцию header:

header(‘Location: http://new-website.com’);

    exit;

?>

Это должно быть установлено перед любой разметкой и контентом другого рода, однако есть одна небольшая сложность. Функция по умолчанию отправляет ответ 302, сообщая о том, что контент был временно перемещен. В нашем случае нужно постоянно перемещать файлы на новый сайт, так что стоит заменить перенаправление 302 на 301:

header(‘Location: http://www.new-website.com/’, true, 301);

    exit();

?>

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

Редирект в PHP

В php есть функция , которая разрешает не только подменять стандартные заголовки, но и добавлять новые.

Синтаксис:

// string - полностью сформированная строка заголовка, который необходимо добавить (без завершающего перевода строки "\n")
// replace указывает, нужно ли заменять заголовки с одинаковыми именами (true), или же добавлять в конец (false)
// http_response_code указывает код http-ответа (300, 301, 302 и т.д.)

void header ( string string ] );

Примеры использования:

header( 'Refresh: 0; url=/error404.html' ); // переадресовать на страницу ошибки немедленно (без задержки)
header( 'Refresh: 5; url=https://www.google.com/' ); // переадресовать на главную страницу Рамблера через 5 секунд после загрузки страницы.
header( 'Location: /', true, 307 ); // перебросить на главную страницу сайта с использованием 307 редиректа.
header( 'Location: /article/page.htm', true, 303 ); // с помощью 303 редиректа переадресовать на внутреннюю страницу сайта.

header( 'Location: http://google.ru/search?q=redirect' ); // с помощью 302 редиректа переадресовывать на поиск в гугле слова redirect (При использовании Location без указания кода редиректа, по умолчанию используется 302-й).

header( 'Location: http://yandex.ru/yandsearch?text=redirect', true, 301 ); // сделать переадресацию с помощью 301 редиректа на поиск в Яндексе слова redirect.

Редирект HTML в PHP:

<?php
echo '<meta http-equiv="refresh" content="5;URL=https://ida-freewares.ru">';

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

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://site.com/');

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

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

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

Скрипт для внедрения такого типа переадресации следующий:

<?php
Header(«http1.1 301 moveed permanently»);
Header(«locationhttp//www.newdomain.ru/newdir/newpage.htm»);
Exit();
?>

В соответствующие места представленного кода необходимо подставить соответственно новый адрес и подкаталог нового ресурса.

Как проверить через Netpeak Spider:

  1. На боковой панели откройте вкладку «Параметры» и отметьте пункт «Код ответа сервера».
  2. Введите URL анализируемого сайта в адресную строку и запустите сканирование кнопкой «Старт».
  3. По завершению сканирования ознакомьтесь с результатами: в основной таблице вы сможете увидеть коды ответа, а на вкладке «Отчёты» → «Ошибки» на боковой панели отобразятся все, имеющиеся на сайте, ошибки, связанные с переадресацией.
  4. Если вам нужен список всех существующих на сайте редиректов, перейдите на вкладку «Отчёты» → «Сводка» и кликните по названию соответствующего типа страниц.
  5. Чтобы посмотреть источники, на которых поставлены ссылки с редиректами, воспользуйтесь сочетанием клавиш Shift + F1.
  6. Для экспорта полученных данных кликните по кнопке «Экспорт» в правом верхнем углу экрана, затем выберите одну из опций: «Результаты в текущей таблице» — чтобы выгрузить отфильтрованные результаты, либо один из специальных отчётов по редиректам.
  7. В программе также доступен отчёт, показывающий страницы, которые содержат ссылки на страницы с редиректом и конечным URL редиректа. Для выгрузки отчёта перейдите в меню «Экспорт» → «Специальные отчёты по ошибкам» → «Редиректы: входящие ссылки и конечные URL».

Examples of redirects

Load a .gif file from a different site

Make sure the other site is something you own. You should never hotlink files from other websites.

Redirect /img/logo.gif https://www.example.com/images/logo.gif

Using Regular Expressions

If you want to use a Regular Expression to redirect something, use the directive:

RedirectMatch "^/oldfile\.html/?$" "https://example.com/newfile.php"

Redirecting error messages

You can also redirect 404 errors. Instead of throwing a 404 page, this redirects to the homepage of the website.

ErrorDocument 404 https://example.com/

Redirecting an old directory to new directory

This redirects files in a old directory (/blog/archives) to a new directory (/archives). The file must exist in the new directory to function.

RewriteRule ^blog/archives/(.*)$ /newarchives/$1 

Что такое редирект

Редирект – это перенаправление пользователя с одного интернет-адреса (URL) на другой. Поясню на примере: вбиваете в адресной строке своего браузера https://casecollector.ru, а попадаете на https://casecollector.ru. Заметили разницу?

А вот пример уже по-жестче: вводите https://partglo.ru/affiliate/10709019 . В результате открылась https://topglop.ru/freedom. Что тут происходит?! Это вообще законно?)

Еще, наверняка, многие видели ссылки вида bit.ly (например, вот такая: https://bit.ly/1oJrmXs – откроется википедия) или vk.cc. Это – так называемые, “сокращатели ссылок”. Они делают длинные некрасивые ссылки короткими.

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

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

Другой пример, когда, по какой-либо причине, меняется название доменного имени (ребрендинг, санкции к старому имени, смена владельца и др.) было бы весьма неплохо сохранить позиции сайта в поиске, тем более, что вся наработанная клиентская база будет искать ресурс по старому имени. Это уже к вопросу, как сделать редирект на другой сайт. То же касается перехода сайта на HTTPS (см. первый пример).

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

Один (а не два последовательных!) 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/

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://%1/$1/

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

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

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

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

Заключение

Использование редиректа 301– очень важный способ поисковой и пользовательской оптимизации веб-ресурса

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

Инструментов для настройки корректной работы Permanent Redirect 301 существует достаточно много. Наиболее удобный и правильный – внесение записей в файл .htaccess. Недостаток этого метода в том, что он доступен только для веб-серверов Apache. При использовании IIS придется настраивать web.config. Для создания сложных правил переадресации более всего подходит PHP, но в этом случае без помощи программиста не обойтись. Еще одним вариантом настройки 301 редиректа может быть обращение к хостинг-провайдеру с целью подключения услуги web-форвардинга.

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

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

Adblock
detector