У мене є наступна проблема на хості, що використовує 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
увімкнена ця проблема , і вона зникла після її відключення.