Résoudre les problèmes

Erreur 404 sur des images, CSS ou JS avec un chemin correct

Vérifié le 4 min de lecture erreurs HTTP fichiers statiques

Il arrive que vous fassiez un lien vers une image, un fichier CSS ou un JavaScript, que vous soyez sûr que le chemin est correct et que le serveur réponde pourtant qu'il ne le trouve pas (erreur 404). Voici les causes les plus fréquentes, de la plus simple à la moins simple.

L'URL n'est pas exactement celle que vous croyez

Ouvrez le site, appuyez sur F12, allez dans l'onglet Réseau et rechargez. Cliquez sur le fichier en erreur pour voir l'URL complète demandée par le navigateur. Comparez-la avec l'emplacement réel du fichier dans le gestionnaire de fichiers :

  • Majuscules et minuscules : sur le serveur, Logo.png et logo.png sont des fichiers différents, même si cela fonctionne sur votre ordinateur.
  • Dossier du domaine : le fichier doit se trouver dans le dossier de ce domaine (public_html ou celui du domaine supplémentaire), pas dans un autre.
  • Chemins dans un CSS : un chemin relatif comme url(img/fondo.jpg) dans un CSS est recherché à partir du dossier du CSS, pas de la page.
  • Fichiers avec version ou hash (app.3f9a1c.js) : après une mise à jour du site, la page peut continuer à demander l'ancien fichier que vous avez déjà supprimé. Videz le cache de l'application et, si vous utilisez un CDN, celui du CDN.

Problème de permissions

Vérifiez que les dossiers, les sous-dossiers et les fichiers eux-mêmes ont des permissions 755 pour les dossiers et 644 pour les fichiers. Vous pouvez les modifier depuis le gestionnaire de fichiers de cPanel avec le clic droit > Change Permissions. N'utilisez jamais 777 : ce n'est pas nécessaire et nous l'expliquons dans pourquoi vous n'avez pas besoin de permissions 777.

Le framework intercepte les requêtes

Les frameworks et applications comme Laravel, Symfony ou CodeIgniter envoient toutes les requêtes vers leur index.php au moyen de règles du .htaccess, et ces règles affectent aussi tous les sous-dossiers. Si les règles n'excluent pas les fichiers existants, le framework répond 404 à vos images ou à vos CSS.

Ouvrez le .htaccess à la racine du site et vérifiez qu'avant la règle qui envoie tout vers index.php figurent ces deux conditions :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

Avec elles, si le fichier ou le dossier existe, le serveur le sert directement. Les versions actuelles des frameworks les incluent déjà ; le problème se pose généralement dans des versions anciennes ou dans des .htaccess modifiés à la main.

Si vous ne pouvez pas toucher à ce .htaccess, créez-en un autre dans le dossier où se trouvent les fichiers statiques en erreur, avec cette ligne au début :

RewriteEngine Off

Vous désactivez ainsi les règles de réécriture uniquement dans ce dossier, et le reste du site continue de fonctionner de la même façon.

Blocage par ModSecurity (erreur 403)

Si dans l'onglet Réseau l'erreur n'est pas une 404 mais une 403, le plus probable est que le pare-feu ModSecurity bloque le fichier par erreur, par exemple à cause de son nom ou des paramètres de l'URL. Désactivez-le un instant pour le domaine, rechargez la page et réactivez-le aussitôt.

Si le fichier se charge avec ModSecurity désactivé, écrivez-nous avec l'URL exacte et l'heure : nous créerons une exception uniquement pour cette règle et ce chemin, et vous n'aurez pas à le laisser désactivé.

Cela peut aussi vous aider

Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.