Apacheで「[negotiation:error] [pid xx] [client xxx.xxx.xxx.xxx:xxxxx] AH00687: Negotiation: discovered file(s) matching request: /path/to/file (None could be negotiated).」エラーが発生




この記事は最終更新日から2年以上経過しています。

サイトを修正していたら以下のエラーが発生しました。

[negotiation:error] [pid xx] [client xxx.xxx.xxx.xxx:xxxxx] AH00687: Negotiation: discovered file(s) matching request: /path/to/file (None could be negotiated).

基本的に.htaccessでリダイレクト設定していてURLごとに処理プログラムを読み込むようになっていたのですが、特定URLだけはなぜかNot Foundになるので原因をしらべていました。
そうすると、例えば/admin/loginのURLでアクセスするときに/admin/login.phpというファイルが存在しているエラーが出ることがわかりました。
対応するパスに物理ファイルが存在しない場合はリダイレクトが成功していました。
エラーについても調べてみると、コンテントネゴシエーションというHTTP/1.1の規格があり、Apacheがそれをサポートしているため発生する現象でした。
解決するためにはコンテントネゴシエーションを無効にすることで期待する動作をさせることができます。
例えば.htaccessで対応するのであれば以下を追記すれば対応できます。

Options -MultiViews