web-dev-qa-db-ja.com

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、しかし私はこの交渉の問題を解決できません。contentを要求するときにApacheがcontents.phpに一致できない理由について何か考えていますか(これはmod_negotiationが行うはずです)。

PDATE: mod_negotiationが.phpとは異なる拡張子のファイルで正しく動作することに気づきました。/admin/contents.txtという名前のファイルがある場合、ブラウザで/を使用して定期的にアクセスできます。 admin/contentsのURL。したがって、問題はphpファイルのみです。交渉が失敗する原因についての手がかりはありますか?

24
lorenzo.marcon

私は解決策を見つけました。とても簡単です。以下を含めるのを忘れました:

AddType application/x-httpd-php .php

apache mod_mimeセクションからhttpd.confへ

PHPスクリプトが正しく機能していたという事実に惑わされました。ただし、mod_negotiationは「興味深い」(および既知の)ファイルタイプのみを検索するため、ネゴシエーションは失敗していました。

40
lorenzo.marcon

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ファイルを変更せずに問題が解決しました。

12
derHippeChip

.phpをメディアタイプにマッピングする代わりに( Debian Bug 589384 で説明されているように、セキュリティに影響を与える可能性があります)、 MultiviewsMatch 似たような質問に対する Mark Ameryの回答でマークされているように、.phpのタイプのないファイルに一致します

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