我在使用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
启用时遇到了这个问题,并且在禁用它后消失了。