Je rencontre le problème suivant sur un hôte utilisant Apache 2.2.22 + PHP 5.4.0
Je dois fournir le fichier /home/server1/htdocs/admin/contents.php
lorsqu'un utilisateur fait la demande:, http://server1/admin/contents
mais j'obtiens ce message sur le serveur error_log.
Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)
Notez que j'ai mod_negotiation
activé et MultiViews parmi les options pour l'hôte virtuel associé:
<Directory "/home/server1/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
Order allow,deny
Allow from all
AllowOverride All
</Directory>
J'utilise également mod_rewrite
, avec les .htaccess
règles suivantes :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>
Cela semble très étrange, mais sur la même boîte avec PHP 5.3.6, cela fonctionnait correctement. J'essaie simplement une mise à niveau vers PHP 5.4.0, mais je ne peux pas résoudre ce problème de négociation. Une idée sur pourquoi Apache ne peut pas correspondre contents.php
lors de la demande content
(quelle devrait être la fonction de mod_negotiation)?
MISE À JOUR: J'ai remarqué que mod_negotiation se comporte correctement avec des fichiers avec une extension différente de .php: donc si j'avais un fichier nommé /admin/contents.txt, je peux y accéder régulièrement avec le navigateur avec / admin / contents url. Le problème concerne donc uniquement les fichiers php. Un indice sur ce qui pourrait faire échouer la négociation?
la source
+MultiViews
activé, et il a disparu en le désactivant.Réponses:
J'ai trouvé la solution. Très facile, en effet. J'ai oublié d'inclure les éléments suivants:
dans la section apache mod_mime dans httpd.conf
J'ai été induit en erreur par le fait que les scripts php fonctionnaient correctement; cependant, la négociation a échoué car mod_negotiation ne recherche que les types de fichiers "intéressants" (et connus).
la source
J'ai eu le même problème après la mise à jour de Debian Squeeze vers Wheezy. Le
mods-enabled/mime.conf
inclut les types de fichiers connus du système:Le problème était que le
/etc/mime.types
fichier a été remplacé par la mise à jour et dans le fichier remplacé, la partie PHP a été commentée. Lors de la recherche, j'ai trouvé:J'ai dû supprimer le
#
de chaque ligne contenant des informations pertinentes pour PHP, puis enregistrer et redémarrer le serveur Web Apache. Cela a résolu le problème sans modifier lemime.conf
fichier.la source
libapache-mod-php5
exécuter des fichiers avec.php
le nom (commefilename.php.jpeg
) qui était la raison originale pour les commenter. Voir bugs.debian.org/589384Au lieu de mapper
.php
sur un type de média (ce qui peut avoir des implications sur la sécurité, comme décrit dans le bogue Debian 589384 qui les a désactivés), vous pouvez configurerMultiviewsMatch
pour faire correspondre les fichiers sans type pour.php
, comme suggéré dans la réponse de Mark Amery à une question similaire :la source