У меня возникла следующая проблема на хосте с использованием 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 среди вариантов для соответствующего виртуального хоста:
<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, я мог бы обращаться к нему регулярно с помощью браузера с / admin / contents url. Так что проблема только для php файлов. Любая подсказка о том, что может привести к провалу переговоров?
источник
+MultiViews
включенным, и она исчезла после его отключения.Ответы:
Я нашел решение. Очень просто. Я забыл включить следующее:
в раздел apache mod_mime в httpd.conf
Я был введен в заблуждение тем фактом, что php-скрипты работали правильно; однако согласование было неудачным, потому что mod_negotiation ищет только «интересные» (и известные) типы файлов.
источник
У меня была такая же проблема после обновления с Debian Squeeze до Wheezy.
mods-enabled/mime.conf
Включает в себя известные типы файлов из системы:Проблема заключалась в том, что
/etc/mime.types
файл был заменен обновлением, а в замененном файле была закомментирована часть PHP. При поиске я обнаружил:Мне пришлось удалить
#
из каждой строки, содержащей php-релевантные материалы, затем сохранить и перезапустить веб-сервер Apache. Это решило проблему без измененияmime.conf
файла.источник
libapache-mod-php5
выполнению исполняемых файлов с.php
именем (напримерfilename.php.jpeg
), которое было исходным обоснованием для их комментирования. См. Bugs.debian.org/589384Вместо сопоставления
.php
с типом носителя (который может иметь последствия для безопасности, как описано в Debian Bug 589384, который их отключил), вы можете настроитьMultiviewsMatch
сопоставление файлов без типа для.php
, как это предлагается в ответе Марка Амери на аналогичный вопрос :источник