Apache文件协商失败

我在使用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并在相关虚拟主机的选项中包含MultiView:

 <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 /内容url regulary访问它。 所以这个问题只针对php文件。 什么可以使谈判失败的任何线索?

我find了解决scheme。 确实很简单。 我忘了包括以下内容:

 AddType application/x-httpd-php .php 

进入Apache的mod_mime部分到httpd.conf中

我被PHP脚本正确工作的事实误导了; 然而谈判失败,因为mod_negotiation只查找“有趣”(和已知)的文件types。

从Debian Squeeze更新到Wheezy后,我遇到了同样的问题。 mods-enabled/mime.conf包含系统中已知的文件types:

 TypesConfig /etc/mime.types 

问题是/etc/mime.types文件被更新所取代,在被replace的文件中,PHP部分被注释掉了。 search时发现:

 #application/x-httpd-php phtml pht php #application/x-httpd-php-source phps #application/x-httpd-php3 php3 #application/x-httpd-php3-preprocessed php3p #application/x-httpd-php4 php4 #application/x-httpd-php5 php5 

我不得不从包含php相关的东西的每一行中删除# ,然后保存并重新启动Apache Web服务器。 这解决了这个问题,而不修改mime.conf文件。