Apache 文件协商失败

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在相关虚拟主机的选项中启用了 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,但我无法解决这个协商问题。你知道为什么 Apachecontents.php在请求时无法匹配content吗(这应该是 mod_negotiation 应该做的)?

更新:我注意到 mod_negotiation 可以正确处理扩展名不同于 .php 的文件:因此,如果我有一个名为 /admin/contents.txt 的文件,我可以使用浏览器通过 /admin/contents url 定期访问它。因此,问题只出现在 php 文件中。有什么线索可以说明什么会导致协商失败吗?

答案1

我找到了解决方案。确实非常简单。我忘了包含以下内容:

AddType application/x-httpd-php .php

进入 apache mod_mime 部分进入 httpd.conf

我被 php 脚本正确运行的事实误导了;然而协商失败了,因为 mod_negotiation 只寻找“有趣的”(已知的)文件类型。

答案2

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

TypesConfig /etc/mime.types

问题在于该/etc/mime.types文件已被更新替换,并且在替换的文件中,PHP 部分被注释掉了。在搜索时,我发现:

#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

答案3

而不是映射.php到媒体类型(这可能会产生安全隐患,如Debian 错误 589384禁用它们),您可以配置MultiviewsMatch匹配没有类型的文件.php,如Mark Amery 对类似问题的回答

<Files "*.php">
    MultiviewsMatch Any
</Files>

答案4

我正在使用带有虚拟主机的 Xammp,mod_rewrite 的错误已在 httpd-vhosts.conf 中的 <Directory "YourPath"> 中删除

反而

选项索引 FollowSymLinks MultiViews

期权指数 FollowSymLinks

来源:https://www.lawebdelprogramador.com/foros/Apache/1422809-solucionado-Negotiation-discovered-files-matching-request.html

问候。

相关内容