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ファイルのみです。交渉が失敗する原因についての手がかりはありますか?
私は解決策を見つけました。とても簡単です。以下を含めるのを忘れました:
AddType application/x-httpd-php .php
apache mod_mimeセクションからhttpd.confへ
PHPスクリプトが正しく機能していたという事実に惑わされました。ただし、mod_negotiationは「興味深い」(および既知の)ファイルタイプのみを検索するため、ネゴシエーションは失敗していました。
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
ファイルを変更せずに問題が解決しました。
.php
をメディアタイプにマッピングする代わりに( Debian Bug 589384 で説明されているように、セキュリティに影響を与える可能性があります)、 MultiviewsMatch
似たような質問に対する Mark Ameryの回答でマークされているように、.php
のタイプのないファイルに一致します :
<Files "*.php">
MultiviewsMatch Any
</Files>