Задача: сделать редирект со старых ссылок на новости вида novosti.php?ELEMENT_ID=87 на новые, с использованием символьных кодов, вида /news/normalnaya-novost.html
Предполагается, что новый раздел новостей уже создан и доступен по адресу news с настроенным ЧПУ для самих новостей.
Решение: размещаем, следующий код в старом файле новостей novosti.php
if((int)$_GET['ELEMENT_ID'] > 0 and CModule::IncludeModule('iblock')){ $arElements = array(); $arSelect = array("DETAIL_PAGE_URL"); $arFilter = array("IBLOCK_ID" => 5, "IBLOCK_TYPE" => 'news', 'ID' => (int)$_GET['ELEMENT_ID']); $dbElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);; $dbElements->SetUrlTemplates('/news/#ELEMENT_CODE#.html'); while ($arElement = $dbElements->GetNext()) { header("HTTP/1.1 301 Moved Permanently"); header("Location: ". $arElement['DETAIL_PAGE_URL']); break; } exit; } header("HTTP/1.1 301 Moved Permanently"); header("Location: /news/"); exit();
где «IBLOCK_ID» => 5 — id информационного блока (у меня 5), «IBLOCK_TYPE» => ‘news’ — тип информационного блока (у меня news).
Таким же образом можно прописать редиректы для других информационных блоков, меняя значения на свои. Теперь при заходе на старый адрес novosti.php?ELEMENT_ID=87 пользователь будет переадресован на новый ЧПУ адрес этой новости.