301 редиректы не срабатывают для дополнительных языков при включенном показе дополнительного языка в url

Если в настройках сео модуля включить “Показывать дополнительные языки в URL” то 301 редиректы не срабатывают для дополнительных языков.
Например имеем url
https://cs-cart.ru/apparel/mens-clothing/t-shirt-color-blue/
делаем редирект на
https://cs-cart.ru/apparel/mens-clothing/t-shirt/
Для основного языка все будет работать, но для дополнительного уже нет и редирект с
https://cs-cart.ru/en/apparel/mens-clothing/t-shirt-color-blue/
на
https://cs-cart.ru/en/apparel/mens-clothing/t-shirt/
уже не сработает.

Причина:
В app/addons/seo/func.php в функции fn_seo_get_route находим

$redirect_data = db_get_row(‘SELECT type, object_id, dest, lang_code FROM ?:seo_redirects WHERE src = ?s ?p’, $uri, $condition);

Тут для поиска редиректа в качестве параметра $uri передается путь для поиска и если для основного языка он корректен, то для дополнительного он содержит язык(/en/apparel/mens-clothing/t-shirt-color-blue/) и конечно такой редирект не находится. Для исправления достаточно убирать язык из $uri например вот так

if ($is_requested_language_in_path){
    $uri = fn_seo_remove_language_from_uri($uri);
}

$condition = fn_get_seo_company_condition('?:seo_redirects.company_id');

$redirect_data = db_get_row('SELECT type, object_id, dest, lang_code FROM ?:seo_redirects WHERE src = ?s ?p', $uri, $condition);

Спасибо, что сообщили о проблеме. Она сохраняется в последней версии (4.18.2). Я передала информацию разработчикам для исправления в будущих версиях платформы.

1 лайк