bitrix редирект на 404

Ситуация:
Сделали новый сайт для компании вместо старого. Осталось заменить старый на новый. Но обычно забывают про наращённую ссылочную массу старым сайтом. Если раньше yandex проиндексировал страницу о компании по адресу /company/ , то теперь /o-kompanii/ . При переходе по старой ссылке новый сайт вернет 404 ошибку.

Задача:
Найти все рабочие ссылки ведущие на сайт и для них сделать редирект.
Решение:
Первым делом составляем список рабочих ссылок на сайт. Сделаем на примере сайта www.rbc.ru

Пишем в строку поиска yandex следующий запрос, который покажет все ссылки на ваш сайт в этой поисковой системе:
host: www.rbc.ru

Для google:
site: www.rbc.ru

Составляем файл в excel, где первая колонка старые адреса сайта, во второй новые.

Как реализовать редирект со старых страниц на новые в 1с-Битрикс.

Логично, что, если человек перейдет на новый сайт по старым ссылкам, он получит 404 ошибку.

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

Находим в корне сайта файл 404.php, который создается по умолчанию. Его нужно привести к такому виду:

Создаем директорию /redirect/ с двумя файлами old и new. В первый копируем все ссылке из первой колонки excel файла, а во второй файл из второй колонки. Важно, что бы сохранился одинаковый порядок и соответствие, т.е. например 3-ья ссылка из файла new должна соответствовать 3-ей ссылке из old.

Теперь разберем файл 404.php
//old файл со ссылками старого сайта
//new файл со ссылками нового сайта
//циклом проходимся по ссылкам старого сайта
//если ссылка по которой перешли на сайт, совпадает с одной из файла old, то устанавливаем код странице 301(что означает перемещен навсегда), далее идет переадресация на страницу, которая соответствует старой ссылке на новом сайте(ссылке в файле new)
Exit – прекращение выполнения скрипта.
Если в файле old не нашлось текущей страницы, то страница вернет 404 ошибку.

Редирект с адресов с параметрами.

Предыдущее решение к сожалению не учитывает переданные параметры:
http://rbc.ru/catalog/? > Если на новый сайт перейдут по этой ссылке и в его структуре есть раздел /catalog/, то он не отдаст код 404, т.к. страница существует, просто передана переменная id равная 2. Мы можем воспользоваться этим.
Благо сайты с организацией такой структуры встречаются редко.

В этой ситуации можно использовать тоже самое решение, только код нужно разместить в главном шаблоне сайта:

Файл new будет содержать ссылки, как и в предыдущем примере, а в old значения, которые может принимать id.

Читайте также о том, как сделать редирект 301 с www на без www статья тут.

Если же вам нужно визуальное управление редиректами, рекомендую установить модуль Редирект Мастер.
В нем можно удобно создать редиректы через админку, загрузить их из Excel, сгенерировать редиректы при изменения ЧПУ или настроить их автоматическое создание.
Модуль доступен в Маркетплейс 1С-Битрикс.

Как многие уже успели заметить, что когда мы в Битриксе заходим в каталог или другой инфоблок, в несуществующий раздел или элемент, нам выдается надпись «Раздел не найден» или «Элемент не найден». А вот если заходим на несуществующую страницу, то выдается страница 404.

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

И вставляем в него код, который будет отправлять нас при обнаружении несуществующей страницы:

GetCurPage(true) !=’/404.php’) LocalRedirect(‘/404.php’);
?>

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

Даже с такой простой функцией сайта, как отображать 404 страницу возникает множество сложностей. В интернете все советует решать эту проблему добавлением событий в файл init.php, прописывать в nginx:

но все эти пути решения неверные, чтобы все правильно работало не нужно что-то специально добавлять. Давайте попробуем с этим разобраться основательно.

404 страница при отсутствующей странице

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

  1. В корне сайта нет файла 404.php, добавляем:

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

  1. Смотрим какая страница отображается вместо 404 страницы, этот вариант почему-то все упускают и начинают городить функции с событиями или редактировать конфиг веб-сервера. Если отображается например страница со списком новостей, то значит в вашем файле urlrewrite.php есть неверная CONDITION**, например она будет выглядеть вот так:

Такое просиходит потому, что при настройке компонента bitrix:news на странице /news/index.php было указано вот так:

Меняем на верное:

Делаем пересоздание правил обработки адресов на странице _/bitrix/admin/urlrewritereindex.php и страница с ошибкой заработает.

Других ситуаций в принципе возникнуть не может, в nginx если вы используете BitrixVM или например конфиг из нашей другой статьи 1С-Битрикс + Nginx + php-fpm + композитный сайт, ничего менять не надо. Если сами писали конфиг для nginx, то за появление ошибки отвечают опции:

для apache это строки файла .htaccess:

для windows server правило для 404 ошибки находится в строчках файла web.config:

404 страница при отсутствующем элементе инфоблока

Тут все еще проще. У компонентов есть опции:

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

Код ответа сервера 200

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: