Le rewrite vers index.php fait ignorer à Apache2 les fichiers en code http 404 et affiche http 200

AmisSHAmisSH Member
24 août modifié dans Bogues

Le rewrite vers index.php fait ignorer à Apache2 les fichiers en code http 404 et affiche http 200

Exemple :

  • Une image est ajoutée dans un article, puis, upload avec un mauvais nom.
  • Un backup réinstallé pour lequel il manquerait des datas.
  • Un backup réinstallé, pour lequel il manquerait des droits.

Je vous propose pour une prochaine mise à jour, de permettre à Apache de renvoyer le code http 404 sur les fichiers qui n'existent pas sur le serveur.

# BEGIN -- Pluxml
Options -Multiviews


RewriteEngine on
RewriteBase /

######################
# In CGI environment #
######################
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
############################
# Début Hack code http 404 #
############################
# PB : Afficher une page avec une image qui n'existe pas sur le serveur Apache2.4 est rewrite par index.php et le code http affiché dans les logs apache2 sera TOUJOURS 200 !
# Le code http 200 devient code http erreur 404 pour les fichiers - images - qui n'existent pas sur le serveur Apache2.4.
# xx.xx.xx.xxx - - [24/Aug/2024:21:21:42 +0200] "GET /data/avatars/amis-sh.png HTTP/2.0" 404 141 "https://amis-sh.fr/" "Mozilla/5.0 (X11; Linux x86_64; rv:130.0) Gecko/20100101 Firefox/130.0"
############################
#
# Première solution :
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
# NE PAS CREER la page 404.php sinon le code http de retour sera 200.
#RewriteRule ^(.*)$ 404.php?$1 [L]
#
# Deuxième solution :
# Always send 404 on missing files in these folders :
RewriteCond %{REQUEST_URI} !^/(data|plugins|themes)/
#
# Troisième solution :
# Toutes les requêtes, à l'exception des fichiers .js, .ico, .gif, .jpg, .png et .css, seront réécrites en index.php :
# RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]
#
############################
# Fin Hack code http 404   #
############################

# Never rewrite for existing files, directories and links :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls vers index.php affiche toujours un code http 200 :
RewriteRule ^(?!feed)(.*)$ index.php?$1 [QSA,L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [QSA,L]

# END -- Pluxml

Avez vous une autre approche pour permettre à Apache2.4 d'afficher un code erreur http 404 pour les fichiers qui n'existent pas sur le serveur ?

NB : J'ai remarqué que Apache ne m'affiche pas de message du type " File not exist / File not found " dans les logs.
Ici, j'ai renommé l'image amis-sh.png pour vérifier le code .htaccess , mais, je n'ai que le code erreur 404, sans le message "File not exist".
xx.xx.xx.xxx - - [24/Aug/2024:21:21:42 +0200] "GET /data/avatars/amis-sh.png HTTP/2.0" 404 141 "https://amis-sh.fr/" "Mozilla/5.0 (X11; Linux x86_64; rv:130.0) Gecko/20100101 Firefox/130.0"
Savez vous si cela est le comportement par défaut de Apache2.4 ?
Il doit être possible de changer le format des logs pour afficher un message du type "File not exist".
Je n'ai pas trouvé de réponse pour le moment, et, je dois me contenter de l'erreur code http 404.

Merci de vos avis.

Connectez-vous ou Inscrivez-vous pour répondre.