301 редирект через .htaccess и сервер Nginx

06:08
3.32K

301 редирект — ответ сервера, означающий перенос контента на новый адрес и сообщающий необходимость обновить URL на имеющихся ссылках. Удобство 301 редиректа отличается тем, что новой странице передаются «пузомерки» старой.

Чаще всего 301 редирект нужен при:

  • Склейке зеркал. Некоторые мастера пренебрегают этой рекомендацией, в результате чего снижаются характеристики в глазах поисковых систем.
  • Смене адреса сайта.
  • Смене системы управления контентом. В этом случае 301 редирект для существующих страниц может не понадобиться, если сохраняется URL страницы после смены CMS.
  • Изменении URL по каким бы то ни было другим причинам.
  • Устранении дублей сайта.

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

Способы настройки

Правильно настроить редирект можно с помощью плагинов, либо при ручном редактировании файла конфигурации. Рекомендуется использовать, либо изучить второй способ. Любой плагин может сработать некорректно или просто сломаться. Надо знать, как руками настраивается в файле .htaccess редирект 301.

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

Можно даже сделать редирект методом HTML. Для этого достаточно написать код:

<meta http-equiv="refresh" content="5" url=http://ВАШ_НОВЫЙ_АДРЕС_САЙТА.ru">

Цифра «5» означает, что у пользователя есть 5 секунд, чтобы прочитать объявление на странице. Можно сообщить клиенту о переезде либо дать иную полезную информацию. Как правило, такой редирект используется в статических сайтах в случае переезда всего одной страницы.

Еще один способ — применение JavaScript. Скрипт выполняется в браузере на стороне клиента. Скорость исполнения зависит от клиентской машины, но в 99 % случаев он более медленный в сравнении с альтернативами. К тому же JavaScript всегда может быть отключен пользователем ради повышения безопасности. Таких людей в 2020 году мало, но они есть.

Своеобразным стандартом считается настройка в файле .htaccess редиректа 301.

Файл .htaccess и настройка редиректа

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

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

Можно использовать напрямую панель управления на хостинге, либо применять FTP-клиент. В 2020 году чаще всего используется первый вариант из-за удобства. Для нахождения документа следует включить отображение скрытых файлов.

Самое главное правило — оптимизация. Работа программиста, оптимизатора и веб-мастера практически полностью состоит из действий по оптимизации. Если можно сократить строчку кода, значит, это нужно сделать.

При этом оптимизировать всегда следует без потери качества.

Как должен выглядеть файл .htaccess

Файл конфигурации может быть даже пустым. Веб-мастер вправе менять его так, как сам считает нужным и как требуется для грамотной работы сайта. Данный материал содержит определенные рекомендации по настройке 301 редиректа. Можно ими воспользоваться, скопировать содержимое, адаптировать под себя — и получится совершенно правильно настроенный файл конфигурации.

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

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

RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]

Данный код защищает PHP Globals от изменений с помощью скриптов. Очень полезная функция для абсолютно любого динамического сайта.

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

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

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

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

Для внесения в файл .htaccess редиректа 301 следует:

  1. Авторизоваться в панели управления вашего сайта.
  2. Проверить наличие файла в коневом каталоге. В 99 % случаев он называется public_html. Как правило, файл должен присутствовать. Однако, если его нет, можно создать самостоятельно.
  3. Создайте блок ifModule. Все последующие манипуляции следует проводить внутри указанного блока.
  4. Включите механизм преобразований. Для этого напишите RewriteEngine On

Чтобы система точно знала, какой именно редирект требуется выполнять, используются флаги. Достаточно в правилах указать [R=301,L]. Однако следует быть максимально внимательным. 301 редирект — не универсальный вариант, в ряде случаев может понадобиться использование, например, 302 перенаправления.

Редирект http/https

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

Чтобы обеспечить 301 редирект на https достаточно добавить:

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

Однако иногда конструкция может не сработать. Возможная причина состоит в том, что правила не работают. Поэтому рекомендуется попробовать следующую конструкцию:

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

В этом случае 301 редирект на https должен сработать. Если ошибка продолжает возникать, рекомендуется попробовать:

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

или:

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

Перенаправление с https на http требуется в гораздо меньшем количестве случаев. Однако, если такая необходимость возникла, следует зеркально поменять http и https. Другими словами, следует писать:

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

В подавляющем большинстве случаев это должно сработать.

Редирект на страницу с другим URL

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

Чтобы этого добиться, следует использовать конструкцию:

RewriteRule ^(.*)old_page.html$ http://vash-sait.ru/new_page.html [R=301,L]

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

RewriteCond %{QUERY_STRING} s=1
RewriteRule ^index.php http://name.site/articles.php? [R=301,L] 

В качестве примера здесь указан параметр s. Однако на его месте может быть что угодно другое. Также допускается использовать сразу несколько параметров.

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

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

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

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

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

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

Склейка зеркал сайта

Поисковые системы руководствуются машинной, а не человеческой логикой. Именно поэтому они воспринимают такие адреса, как www.site.ru и site.ru, как два разных ресурса. Более того, наличие сайта по одному адресу будет зафиксировано, а по второму определится в качестве копии.

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

В файл следует добавить такую запись:

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

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

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

Изменение домена

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

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

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

Бывает, что главная страница не может работать сразу по нескольким адресам. В этом случае применяется такая запись:

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

Рекомендуется уделять этому факту первоочередное внимание во время настройки с точки зрения поисковой оптимизации.

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

Код 404 Not Found

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

Также данная ошибка возникает в том случае, когда пользователь вручную набирает адрес и ошибается в символе. Рекомендуется сделать правильное перенаправление с ошибки 404 на главную. Достаточно написать:

 ErrorDocument 404 http://www.site.com/301.html 

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

Редирект для PHP

Если нет желания разбираться с ручным редактированием файла .htaccess, всегда можно сгенерировать код на php.

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

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

Постоянный редирект для Nginx

Это еще один сервер, который часто применяется совместно с Апачем. В этом случае мастеру придется редактировать другой документ — nginx.config, который можно найти в server.

Чтобы сделать перенаправление с www на без www, допишите строки:

server {
    #...
    if($host~ * www\.(.*)) {
    set $host_without_www $1;
    rewrite ^ (.*) $ http: //$host_without_www$1 permanent;
    }#...
}

Редирект в CMS

На уровне CMS тоже можно настраивать перенаправления. Достаточно найти в поиске подходящий плагин и использовать графические настройки.

Преимущества такого решения:

  • Простота управления. Плагин полностью берет на себя всю работу веб-мастера. Это действительно удобно, избавляет от необходимости дополнительно что-то учить.

  • Возможность выбора плагинов.

Но, несмотря на эти преимущества, не рекомендуется пользоваться плагинами, если можно обойтись другими средствами. Главная причина — отсутствие уверенности в оптимизации кода.

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

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

  • Пользователям WordPress — Simple 301 Redirects.
  • Пользователям OpenCart — редактирование файла .htaccess. Код может выглядеть таким образом:
RewriteCond %{QUERY_STRING} ^_route_=адрес_старой_страницы.html$
RewriteRule ^(.*)$ http://ваш_домен.ru/новой_страницы/? [R=301,L]
  • Пользователям Joomla — редиректы настраиваются в настройках.

Редирект в панелях управления

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

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

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

Генерация кода в автоматическом режиме

Люди, стремящиеся сэкономить свои силы, могут воспользоваться одним из способов автоматической генерации кода. Например, https://seomagnifier.com/htaccess-redirect-code-generator. Однако лучше всего изучить синтаксис и научиться писать самостоятельно.

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

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

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

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

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

Качественное тестирование внесенных изменений — необходимый элемент правильной настройки. Тестировать систему рекомендуется даже в том случае, если веб-мастер полностью уверен в том, что он все сделал правильно. Также рекомендуется проверить сайт на различные уязвимости. Бывает, что веб-мастер по рассеянности забывает заблокировать ту или иную дыру в безопасности.

06:08
3.32K
Этот сайт использует cookie для хранения данных. Продолжая использовать сайт, Вы даете свое согласие на работу с этими файлами.