Задача: сделать редирект со старых ссылок на новости вида 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 пользователь будет переадресован на новый ЧПУ адрес этой новости.