Езиков код, който приличаше на Perl
На 19 август 2026 г. добавихме в .htaccess правило, което блокира вид файлове, които никога не бива да се сервират директно на браузъра: останали копия на изходен код в основната уеб директория след редакция — index.php.bak, забравен config.py, всичко със скриптово разширение, при което посетител би могъл да изтегли изходния код като обикновен текст, вместо той да се изпълни.
Правилото проверяваше разширението на файла: .php, .py, .rb, .pl, както и още дузина други. .pl е Perl. В този проект няма нито един ред на Perl — правилото беше предпазна мярка, а не поправка за съществуващ файл.
Около ден по-късно посетител съобщи, че прегледите на броячите са счупени. Всички, но само на един език.
Другото „pl“
stats4u.net избира езика за всеки посетител чрез договаряне по Accept-Language, а не по фиксирана настройка по подразбиране — браузър, настроен на полски, получава /pl/ директно, без пренасочване, а когато нищо не съвпада, сайтът се връща към английски. Полският е често съвпадение: там попадат достатъчно посетители, за да не може един ден със счупени миниатюри да остане дълго незабелязан.
Всеки преглед на дизайн е един малък файл за всеки стил и език: cache/preview/2900.pl.svg. Шаблонът, предназначен да улови something.pl — скрипт на Perl — улавяше и 2900.pl и след него .svg: номер на стил, езиков код, който случайно се пише като скриптово разширение, и после истинският тип на файла. Шаблон точка-pl-точка не може да различи двете неща.
Всеки преглед от вида .pl.svg и .pl.png в галерията започна да отговаря с 403 Forbidden. Всички други езици останаха незасегнати, защото никой друг езиков код, използван от този сайт, не съвпада с елемент от списъка с разширения. Само този един.
Какво се промени
pl беше премахнато от списъка с разширения. Списъкът все така блокира всяко истинско скриптово разширение, за което този проект има причина да се тревожи; вече не блокира език.
Струва си да се запише заради причината, поради която изобщо се случи: списъкът с разширения на файлове и списъкът с езикови кодове идват от два различни речника и нищо не пречи запис от две букви да означава и двете едновременно. Преди да добавите нещо в който и да е от двата списъка на сайт с езикови префикси в пътя, проверете го спрямо другия. Тази проверка не беше направена тук и проблемът излезе наяве, защото читател забеляза счупени миниатюри — затова pl, което вече го няма в списъка, сега е придружено от коментар с причината, така че при следващото разчистване тя да бъде видяна преди правилото.