Comment forcer proprement la redirection des objets SPIP vers leur url canonique ?

J’ai sans doute loupé quelquechose. Sur SPIP par défaut tous les types d’url cohabitent sans redirection. Les url ‹ /article123.html › et ‹ ?article123 › pointent vers la même page et crée ainsi un doublon. Est-ce qu’il existe un moyen simple que tous les liens soient redirigés en 301 avec l’url canonique (ex. url propre) ?

J’ai bricolé avec ce qui suit dans le squelette article.html, mais il y a mieux à faire n’est-ce pas ?

<BOUCLE_principale_article (ARTICLES) {id_article}><?php
        $lien_propre = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?');
        $canonical_url = "[(#URL_ARTICLE|url_absolue)]";
        if ($lien_propre !== $canonical_url) { include_spip('inc/headers'); redirige_par_entete($canonical_url); }
?><INCLURE{fond=structure, env, id_rubrique=#ENV{id_rubrique,#ID_RUBRIQUE}, id_secteur=#ID_SECTEUR, type-page=article, composition=#COMPOSITION} />^M
</BOUCLE_principale_article>

et pour des redirections permanentes j’ai ajouté dans mes_options.php

define('_STATUS_REDIRECTION_VIRTUEL', 301);

Je viens de voir que seul le define suffit pour obtenir ce comportement.
J’ai la réponse à ma question.

Il faudrait peut-être le préciser sur

Il s’avère que ça ne suffit pas tout à fait.
Les liens de type spip.php?page=article&id_article=140 ne sont pas redirigés.
Dans un tel cas, seul mon bricolage fonctionne

Tu payes ton ticket ? :slight_smile: