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.
Là é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.
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ésfoo.*
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.