Здесь мы рассмотрим как настроить автоматический редирект с URL, содержащего ID элемента, на URL с человекопонятным урлом (ЧПУ). Это может быть полезно для улучшения пользовательского опыта и SEO. Например, нужно настроить редирект с адреса /news/945
на /news/s-novym-godom
.
Для реализации редиректа все элементы (например, новости или статьи блога) должны иметь символьные коды, а в системе Битрикс должны быть настроены ЧПУ, чтобы страницы открывались по необходимым адресам.
Для этого нужно внести следующий код в файл
[root]/local/php_interface/init.php
use Bitrix\Main\Loader;
use Bitrix\Main\Data\Cache;
use Bitrix\Iblock\ElementTable;
use Bitrix\Main\Context;
AddEventHandler('main', 'OnBeforeProlog', function () {
global $APPLICATION;
$currentPage = $APPLICATION->GetCurPage();
// Проверяем, соответствует ли текущий URL формату с ID
if (preg_match('~^/news/(\d+)/~', $currentPage, $matches)) {
$elementId = (int)$matches[1];
if ($elementId > 0 && Loader::includeModule('iblock')) {
// Используем кеш для минимизации нагрузки
$cache = Cache::createInstance();
$cacheTime = 3600; // Время жизни кеша
$cacheId = 'news_redirect_' . $elementId;
$cacheDir = '/news_redirects/';
if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) {
$redirectUrl = $cache->getVars();
} elseif ($cache->startDataCache()) {
// получаем нужный элемент блока
$element = ElementTable::getList([
'filter' => ['ID' => $elementId],
'select' => ['CODE'],
'limit' => 1,
])->fetch();
if ($element && $element['CODE']) {
$redirectUrl = '/news/' . $element['CODE'] . '/';
$cache->endDataCache($redirectUrl);
} else {
$cache->abortDataCache();
$redirectUrl = false;
}
}
if ($redirectUrl) {
LocalRedirect($redirectUrl, false, '301 Moved Permanently');
die(); // Завершаем выполнение
}
}
}
});
Код выполняется в самом начале жизненного цикла страницы, до загрузки компонентов и поиска данных. Это позволяет выполнить редирект на ранней стадии. Для минимизации нагрузки на базу данных используется кеширование. Если ранее редирект уже был рассчитан, его данные берутся из кеша, что ускоряет обработку. Используется редирект с кодом 301 Moved Permanently, который сообщает поисковым системам о постоянном изменении URL.