Quand « pl » signifiait deux choses différentes
Le 19 août 2026, nous avons ajouté une règle à .htaccess bloquant une catégorie de fichiers qui ne devrait jamais être servie directement à un navigateur : des copies de code source oubliées dans la racine web après une modification — index.php.bak, un config.py égaré, tout fichier portant une extension de script qu'un visiteur pourrait récupérer sous forme de texte brut au lieu de le voir s'exécuter.
La règle se basait sur l'extension du fichier : .php, .py, .rb, .pl, et une douzaine d'autres. .pl correspond à Perl. Ce projet ne contient pas une seule ligne de Perl — la règle était préventive, pas un correctif pour un fichier qui aurait existé.
Environ un jour plus tard, un visiteur a signalé que les aperçus de compteurs étaient cassés. Tous, sans exception, mais dans une seule langue.
L'autre « pl »
stats4u.net choisit une langue pour chaque visiteur par négociation Accept-Language, et non par une valeur par défaut fixe — un navigateur configuré en polonais reçoit directement /pl/, sans redirection, et l'anglais est la langue de repli du site lorsque rien ne correspond. Le polonais est une correspondance fréquente : suffisamment de visiteurs y atterrissent pour qu'une journée de vignettes cassées ne puisse pas passer inaperçue longtemps.
Chaque aperçu de modèle est un petit fichier par style et par langue : cache/preview/2900.pl.svg. Le motif censé repérer something.pl — un script Perl — correspondait aussi à 2900.pl suivi de .svg : un numéro de style, un code de langue qui s'écrit par hasard comme une extension de script, puis le véritable type de fichier. Un motif point-pl-point ne peut pas distinguer les deux cas.
Chaque aperçu .pl.svg et .pl.png de la galerie s'est mis à répondre 403 Forbidden. Toutes les autres langues étaient épargnées, car aucun autre code de langue utilisé par ce site n'entre en collision avec une entrée de la liste d'extensions. Une seule était concernée.
Ce qui a changé
pl a été retiré de la liste des extensions. Elle continue de bloquer toutes les véritables extensions de script dont ce projet a des raisons de se méfier ; elle ne bloque plus une langue.
Cela mérite d'être consigné pour la raison même de l'incident : une liste d'extensions de fichiers et une liste de codes de langue proviennent de deux vocabulaires différents, et rien n'empêche une entrée à deux lettres de signifier les deux à la fois. Avant d'ajouter une entrée à l'une ou l'autre de ces listes sur un site dont les chemins comportent des préfixes de langue, il faut la vérifier par rapport à l'autre. Nous ne l'avons pas fait, et il a fallu qu'un lecteur remarque des vignettes cassées — pas notre propre supervision — pour que cela soit détecté.