Страница существует но отдает код 404 на разных языковых версиях

На сайте при выполнении определенных условий в УРЛ категории подставляется название города, чтобы получить посадочные страницы категорий под разные города.

Например, категория https://site.ru/ru/torty - категория города https://site.ru/GOROD/ru/torty

Столкнулись с такой проблемой. Страница в УРЛ которой язык по умолчанию https://site.ru/GOROD/ru/torty - отдает код сервера 200, а страницы других языковых версий - отдают код сервера 404…

Например, https://site.ru/GOROD/en/torty или https://site.ru/GOROD/uk/torty

Может это и НЕ связано с языком по умолчанию в УРЛ, но вот такая вот беда…

Как понять, почему страницы отдают код 404, если на сайте страница открывается и на ней все отображается как нужно…

Напишите, пожалуйста, какой алгоритм действий вы бы порекомендовали использовать, чтобы понять почему страницы отдают код 404 вместо кода 200, чтобы можно было найти ту часть кода и исправить. Спасибо

Программист написал что на 95% проблема в этой части кода, может тут вы что-то увидите что может вызывать проблему:

Спойлер
function fn_app_get_route(&$req, $result, $area, &$is_allowed_url)
{
    if (empty($_POST) && empty($req["is_ajax"]) && empty($_SESSION['ab__seo_data']) && fn_get_request_uri($_SERVER['ORIGINAL_REQUEST_URI']) !== fn_get_request_uri($_SERVER['REQUEST_URI'])) {
        fn_redirect($_SERVER['REQUEST_URI']);
    }
    if (!empty($req["dispatch"]) and $req["dispatch"] == "_no_page" && $area = 'C' && empty(Registry::get('app_seo_domain'))) {
        $server_uri = $_SERVER['REQUEST_URI'];
        $uri = fn_get_request_uri($server_uri);
        if (!empty($uri)) {
            $frontend_default_language = Registry::get('settings.Appearance.frontend_default_language');
            $show_secondary_language_in_uri = YesNo::toBool(Registry::get('addons.seo.seo_language'));
            $use_single_seo_name = YesNo::toBool(Registry::get('addons.seo.single_url'));

            $requested_language = null;
            $uri_path_parts = [];

            list($path) = explode('?', $uri);

            if ($path) {
                $uri_path_parts = explode('/', $path);
                $uri_path_parts = array_values(array_filter($uri_path_parts, function ($part) {
                    return $part !== '';
                }));
            }

            $language_in_uri = null;
            if (!empty($uri_path_parts)) {
                static $valid_languages;

                if ($valid_languages !== null) {
                    return $valid_languages;
                }

                $valid_languages = AppRegistry::getOrSetCache(
                    'seo_active_languages',
                    ['languages', 'storefronts_languages'],
                    ['static', 'company'],
                    static function () {
                        return Languages::getActive();
                    }
                );

                $lang_code_candidate = reset($uri_path_parts);
                if (isset($valid_languages[$lang_code_candidate])) {
                    $language_in_uri = $lang_code_candidate;
                }
            }

            $is_requested_language_in_path = false;
            if ($language_in_uri && $show_secondary_language_in_uri) {
                $requested_language = $language_in_uri;
                $is_requested_language_in_path = true;
            }
            if (isset($req['sl'])) {
                $requested_language = $req['sl'];
            }

            if ($show_secondary_language_in_uri && $requested_language === $frontend_default_language) {
                if ($is_requested_language_in_path) {
                    $uri = fn_seo_remove_language_from_uri($uri);
                }
                unset($req['sl']);

                $redirect_url = trim(Registry::get('config.current_location'), '/') . $uri;

                if ($req) {
                    $redirect_url .= '?' . http_build_query($req);
                }

                $result = [
                    INIT_STATUS_REDIRECT,
                    $redirect_url,
                    false,
                    true,
                ];

                return;
            }

            $rewrite_rules = fn_get_rewrite_rules();

            foreach ($rewrite_rules as $pattern => $query) {
                if (
                    !preg_match($pattern, $uri, $matches)
                    && !preg_match($pattern, urldecode($query), $matches)
                ) {
                    continue;
                }

                $_query = preg_replace('!^.+\\?!', '', $query);

                parse_str($_query, $objects);
                $result_values = 'matches';

                foreach ($objects as $key => $value) {
                    preg_match('!^.+\[([0-9])+\]$!', $value, $_id);
                    $objects[$key] = (strpos($value, '$') === 0) ? ${$result_values}[$_id[1]] : $value;
                    if ($key === 'sl'){

                    }
                }

                if (!empty($objects) && !empty($objects['object_name'])) {
                    preg_match('!^([^\/]+)\/([a-z]+)!', $matches[2], $_matches);

                    if (!empty($_matches[1])){
                        $matches[2] = $_matches[2];
                        $objects['object_name'] = rtrim($objects['object_name'], '/');
                        if (!empty($matches[2]) && $matches[2] === $objects['sl']){
                            Registry::set('app_seo_domain', $_matches[1]);
                            $r_uri = &$_SERVER['REQUEST_URI'];
                            $r_uri = str_replace("/" . $_matches[1] . '/', "/", $uri);
                            $req = array();
                            fn_seo_get_route($req, $result, $area, $is_allowed_url);
                            break;
                        }
                    }
                }
            }
        }
    }
}

В cscart вроде при открытии страницы не добавляется в url код языка. При включении языка как я помню по функциям передается lang_code которым помогает менять данные. Так такового добавления кода языка вроде нет. Возможно у вас кастомный модуль для языка, которая работает с seo. По идее если вы выбрали язык и перейдете по url: https://site.ru/torty она должна была поменять язык сайта

Верно, в cscart нет. Я описываю мою ситуацию и прошу совета как можно выявить в каком именно месте ломается, чтобы пофиксить.

Попробуйте отключить seo модули.