Skip to content

Boucle infinie de redirection en cas de surcharge de `urls_arbo_decoder_url_dist`

Sur un site je surcharge urls_arbo_decoder_url_dist par une fonction urls_arbo_decoder_url pour propager les utm_ en cas de redirection

function urls_arbo_decoder_url(string $url, string $entite, array $contexte = []): array {
    include_spip('urls/arbo');
    [$contexte, $entite, $url_redirect, $type] = urls_arbo_decoder_url_dist($url, $entite, $contexte);

    if (!is_null($url_redirect)
        and !empty($_SERVER['REDIRECT_URL'])
        and $_SERVER['REDIRECT_URL'] === "/$url"
        and !empty($_SERVER['QUERY_STRING'])
        and strpos($_SERVER['QUERY_STRING'], 'utm_') !== false
    ) {
        $url_redirect2 = $url_redirect;
        $qs = [];
        parse_str($_SERVER['QUERY_STRING'], $qs);
        foreach ($qs as $k => $v) {
            if (str_starts_with($k, 'utm_')) {
                $url_redirect2 = parametre_url($url_redirect2, $k, $v, '&');
            }
        }
        //spip_log("urls_arbo_decoder_url: REDIRECT : ".json_encode([$contexte, $entite, $url_redirect, $type]), 'dbg' . _LOG_DEBUG);
        //spip_log("urls_arbo_decoder_url: REDIRECT2 : ".$url_redirect2, 'dbg' . _LOG_DEBUG);
        $url_redirect = $url_redirect2;
    }
    return [$contexte, $entite, $url_redirect, $type];
}

malheureusement, cela provoque des boucles infinies de redirections à cause de la ligne https://git.spip.net/spip/urls_etendues/-/blob/master/urls/arbo.php?ref_type=heads#L820 qui croit qu'elle est appelée par un autre module d'URL