Замена нижнего подчеркивания на дефис с редиректом при заходе на страницу
Иногда после переработки или переезда сайта может возникнуть ситуация, когда на старом URL страниц формировались с нижним подчеркиванием (_), а на новом формируются через дефис/тире (-).
Можно, конечно, составить карту редиректов и заполнить её в .htaccess, или составить массив для редиректа через php, или заполнить редиректы через какой-нибудь модуль.
Но можно просто воспользоваться событием и делать автоматический редирект.
Ниже приведен пример, где я воспользовался событием OnBeforeProlog, и если в ссылке были нижние подчеркивания, заменял их на тире, затем делал 301 редирект. В примере дополнительно стоит условие, что только если ссылка начинается с /catalog/. Если хотите можете просто его убрать или заменить на своё.
Весь представленный код размещаем в /local/php_interface/init.php.
<?php
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'redirectUnderlineToDash');
function redirectUnderlineToDash()
{
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
$uri = $request->getRequestUri();
if (str_starts_with($uri, '/catalog/') && str_contains($uri, '_')) {
// Разделяем URL на части: путь, параметры и якорь
$urlParts = parse_url($uri);
// Обрабатываем только путь (часть между доменом и параметрами)
if (isset($urlParts['path']) && str_contains($urlParts['path'], '_')) {
$newPath = str_replace('_', '-', $urlParts['path']);
// Собираем новый URL
$newUri = $newPath;
// Добавляем параметры, если они были
if (isset($urlParts['query'])) {
$newUri .= '?' . $urlParts['query'];
}
// Добавляем якорь, если он был
if (isset($urlParts['fragment'])) {
$newUri .= '#' . $urlParts['fragment'];
}
// Делаем редирект только если путь изменился
if ($newUri !== $uri) {
LocalRedirect($newUri, true, '301 Moved Permanently');
}
}
}
}
Оставьте комментарий
Если эта статья была полезной для вас, оставьте комментарий ниже или задайте интересующий Вас вопрос. Ваш опыт может помочь другим читателям!
Написать комментарий