У мене є наступна проблема на хості, що використовує Apache 2.2.22 + PHP 5.4.0
Мені потрібно надати файл, /home/server1/htdocs/admin/contents.phpколи користувач робить запит:, http://server1/admin/contentsале я отримую це повідомлення на сервері error_log.
Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)
Зауважте, що я mod_negotiationввімкнув та MultiViews серед варіантів відповідного virtualhost:
<Directory "/home/server1/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
Order allow,deny
Allow from all
AllowOverride All
</Directory>
Я також використовую mod_rewriteтакі .htaccessправила:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>
Це здається дуже дивним, але в одній коробці з PHP 5.3.6 вона працювала правильно. Я просто намагаюся оновити PHP 5.4.0, але я не можу вирішити цю проблему переговорів. Будь-яка ідея про те, чому Apache не може відповідати contents.phpпри contentзапиті (що повинно бути те, що має робити mod_negotiation)?
ОНОВЛЕННЯ: Я помітив, що mod_negotiation правильно поводиться з файлами з розширенням, відмінним від .php: тому, якщо у мене буде файл з іменем /admin/contents.txt, я можу отримати доступ до нього регулярно за допомогою браузера з URL-адресою / admin / content. Тож проблема полягає лише у файлах php. Будь-яка підказка про те, що може змусити переговори провалитися?
+MultiViewsувімкнена ця проблема , і вона зникла після її відключення.