web-dev-qa-db-fra.com

Apache 2.4 charge les fichiers image même sans extension. Pourquoi?

J'ai une page HTML avec les éléments suivants:

<img src=J3 width="100" height="150" alt="Student Name" style="float:left;"/>

Dans le même répertoire se trouve un fichier image, J3.jpg. La page contenant l'élément d'image ci-dessus charge correctement le fichier image et je ne comprends pas pourquoi. (Je sais que l'attribut src= est mutilé; je suis un enseignant et c'est un travail d'étudiant.)

Le travail de chaque élève se trouve dans/home/userid/public_html. Voici la section pertinente de /etc/httpd/conf/httpd.conf:

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

Une recherche de MultiViews dans httpd.conf ne trouve que deux lignes de commentaire. Par conséquent, MultiViews n'est activé nulle part ailleurs. Il n'y a pas de mod_rewrite dans le fichier de configuration.

Il y a un fichier .htaccess dans le répertoire de chaque élève. Pas de MultiViews ici non plus, mais pour être complet, voici celui en question:

AuthType Basic
AuthName "Password Required"
Satisfy any
Deny from all
AuthUserFile /etc/httpd/users
AuthGroupFile /etc/httpd/groups
Require user [redacted]
Require group professors

Mon objectif est de changer httpd.conf afin que ce qui précède ne fonctionne plus, puis d'indiquer aux étudiants de le faire correctement.

était un MultiViews dans la section de répertoire ci-dessus. Je l'ai enlevé et redémarré httpd avant de poster ici. J'ai vérifié/var/log/messages pour être absolument certain que le démon HTTP a été redémarré avec succès.

Si je copie le contenu du répertoire public_html de l’élève dans un répertoire situé sous la racine du serveur, plus précisément /var/www/html/2015_02/student/ l’image ne pas s’affiche, il s’agit donc du répertoire de cet élève ou de la manière dont les répertoires d’étudiants sont configurés dans la configuration ci-dessus. Le test ci-dessous élimine un problème avec ce répertoire particulier.

J'ai construit un faux répertoire d'étudiants, /home/bbrown/public_html/ et y ai placé un fichier jpeg. Je peut l'afficher sans l'extension .jpg, par exemplehttp://weblab.spsu.edu/~bbrown/bbrown_quad_175 et l'URL reste inchangée, sans l'extension. Quelque chose ne va pas dans la configuration, éventuellement dans la section <Directory /home/*/public_html> ci-dessus. Tout cela après avoir retiré MultiViews et redémarré. Il est donc impossible que l'image ait été mise en cache et transmise à partir de l'antémémoire.

4
Bob Brown

Cette fonctionnalité d'Apache est appelée "MultiViews" et est gérée par le module de négociation de conten :

... si /some/dir a MultiViews activé et que /some/dir/foo n'existe pas, le serveur lit le répertoire à la recherche de fichiers nommés foo.* et simule efficacement une table de caractères nommant tous ces fichiers. fichiers, en leur attribuant les mêmes types de support et les mêmes encodages que si le client en avait demandé l’un par leur nom. Il choisit ensuite la meilleure correspondance avec les exigences du client.

Il peut être désactivé avec la configuration Options -MultiViews comme décrit dans cette question à partir de ServerFault: Apache multiviews, comment le désactiver .

L'option MultiViews peut apparaître dans le fichier principal httpd.conf, dans un fichier .htaccess ou dans des fichiers accompagnant une directive Include, tels que ceux dans /etc/httpd/conf.d. Le simple fait de vérifier le fichier de configuration principal ne suffit pas.

7
Stephen Ostermiller