Apacheファイルのネゴシエーションに失敗しました


23

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が何をすべきか)

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


mod_negotiationはどのように構成しますか?使っていますか?
ミルチャVutcovici

さて、httpd.confにmod_negotiationを含めるだけで、VirtualHostのMultiViewsオプションは、私が知っている限り、探していることを実行するのに十分なはずです。
lorenzo.marcon

3
FWIW、+MultiViews有効にするとこの問題が発生し、無効にすると消えてしまいました。
フェリックスフランク

回答:


39

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

AddType application/x-httpd-php .php

httpd.confのapache mod_mimeセクションに

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


3
この!こっちこっち!私が非常に役に立たない「Discovered File(s)/ None Negotiated」エラーを受け取っていた理由を探して夜の大半を費やしました。スクリプトは以前は正常に動作していたため、テスト対象のディストリビューションのmod_mimeにタイプが含まれていなかったという事実を追跡するという悪魔がありました。私はあなたにビールを借りています。
アコイMeexx

私がアメリカに来るとき、私は喜んであなたのビールを受け入れます:)
lorenzo.marcon

これは完璧に動作します!! @ lorenzo.marcon質問と回答をありがとう!
rogcg

これはある時点で変更されているはずです。php MultiViewsが機能するために、これを以前に追加する必要はなかったと確信しています。
user1338062

メートルトンありがとう!なぜmodがsearch /?$からsearch.phpに書き換えられなかったのか疑問に思いながら、壁に頭をぶつけていました。ネゴイチエーションモジュールは、一般的に知っておくべき書き換えモジュールよりも優先されるようです。
zıəsuɐɟəʇs

12

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


これは、ゴーストに対する4時間のデバッグが終わった後、私を救った。
MarkSkayff

これをlibapache-mod-php5行うと.php、ファイルをfilename.php.jpegコメントアウトするための元の根拠である名前(など)でファイルを実行する可能性があることに注意してください。bugs.debian.org/589384
ケビノイド

0

代わりに、マッピングの.php(で説明したように、セキュリティに影響を持つことができるメディアタイプにDebianバグ589384それらを無効にして)、あなたが設定することができますMultiviewsMatchのためのタイプせずにファイルを一致させるために.phpで提案されているように、同様の質問に対するマークアメリーの答え

<Files "*.php">
    MultiviewsMatch Any
</Files>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.