Plugin “URL Racine”

Transformer les URLs du site en chemins absolus depuis la racine du site.

Plugin SPIP permettant d’uniformiser les URLs internes en chemins absolus sans nom de domaine.

Objectif

Dans SPIP, les URLs générées peuvent être :

  • relatives (article/monarticle, IMG/logo.png)
  • absolues avec domaine (https://example.org/article/monarticle)

Les URLs relatives dépendent du contexte de la page et peuvent entraîner des comportements indésirables (concaténation, erreurs 404, incohérences).

Ce plugin permet de garantir des URLs internes sous la forme :


/article/monarticle

indépendantes du contexte.


Fonctionnalités

Le plugin fournit :

  • un filtre |url_racine pour convertir une URL en chemin absolu (racine) ;
  • un filtre |urls_racine pour réécrire les URLs dans un fragment HTML ;
  • une intégration au pipeline post_propre pour traiter automatiquement les contenus éditoriaux.

Utilisation

Filtre |url_racine

[(#URL_ARTICLE|url_racine)]
[(#CHEMIN{css/style.css}|url_racine)]

Filtre |urls_racine

[(#FICHIER|balise_img|urls_racine)]

Ce filtre réécrit notamment les attributs :

  • href
  • src
  • srcset
  • action
  • formaction
  • data-* (selon implémentation)

Comportement

URLs internes

https://example.org/article/123 → /article/123

Site en sous-répertoire

https://example.org/spip/article/123 → /spip/article/123

Le sous-répertoire est conservé automatiquement.

URLs relatives

IMG/logo.png → /IMG/logo.png

Normalisation des chemins

Les segments relatifs sont résolus :

../IMG/logo.png → /IMG/logo.png
../../truc → /truc

URLs non modifiées

Le plugin ignore volontairement :

  • les liens externes ;
  • mailto:, tel:, javascript:, data: ;
  • les ancres #ancre ;
  • les URLs protocol-relative de type //cdn.example.org/....

Portée

  • Les contenus éditoriaux (#TEXTE, #CHAPO, etc.) sont traités automatiquement via post_propre.
  • Les squelettes (y compris le head) doivent utiliser explicitement le filtre |url_racine.

Exemple :

<link rel="stylesheet" href="[(#CHEMIN{css/style.css}|url_racine)]">

Limites

Le plugin ne modifie pas l’ensemble du HTML via affichage_final.

Ce choix est volontaire afin de :

  • préserver les performances ;
  • éviter les effets de bord ;
  • garder un comportement explicite et maîtrisé.

Conseil d’usage

Pour un résultat propre sur tout le site :

  • utiliser |url_racine dans les squelettes, noisettes et le head ;
  • laisser post_propre traiter les contenus éditoriaux ;
  • éviter les URLs relatives dans les templates.

Comment l’utiliser dans le site

Pour résumer, dans les squelettes :

<a href="[(#URL_ARTICLE|url_racine)]">Voir l’article</a>
<link rel="stylesheet" href="[(#CHEMIN{css/dsfr.css}|url_racine)]">
<script src="[(#CHEMIN{javascript/site.js}|url_racine)]"></script>
<img src="[(#LOGO_ARTICLE|extraire_attribut{src}|url_racine)]" alt="">

Et pour un besoin ponctuel sur un bloc HTML :

[(#INCLURE{fond=inclure/un_fragment}|urls_racine)]

Discussion

No discussion

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom