Negosiasi file Apache gagal

23

Saya mengalami masalah berikut pada host menggunakan Apache 2.2.22 + PHP 5.4.0

Saya perlu memberikan file /home/server1/htdocs/admin/contents.phpketika pengguna membuat permintaan:, http://server1/admin/contentstapi saya mendapatkan pesan ini di server error_log.

Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)

Perhatikan bahwa saya telah mod_negotiationmengaktifkan dan MultiViews di antara opsi untuk virtualhost terkait:

<Directory "/home/server1/htdocs">
    Options Indexes Includes FollowSymLinks MultiViews
    Order allow,deny
    Allow from all
    AllowOverride All
</Directory>

Saya juga menggunakan mod_rewrite, dengan .htaccessaturan berikut :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>

Tampaknya sangat aneh, tetapi pada kotak yang sama dengan PHP 5.3.6 digunakan untuk bekerja dengan benar. Saya hanya mencoba upgrade ke PHP 5.4.0, tetapi saya tidak bisa menyelesaikan masalah negosiasi ini. Adakah alasan mengapa Apache tidak dapat mencocokkan contents.phpketika meminta content(yang seharusnya dilakukan mod_negotiation)?

UPDATE: Saya perhatikan bahwa mod_negotiation berperilaku benar dengan file dengan ekstensi berbeda dari .php: jadi jika saya memiliki file bernama /admin/contents.txt, saya dapat mengaksesnya secara teratur dengan browser dengan / admin / url url. Jadi masalahnya hanya untuk file php. Adakah petunjuk tentang apa yang bisa membuat negosiasi gagal?

lorenzo.marcon
sumber
Bagaimana Anda mengkonfigurasi mod_negotiation? Apakah Anda menggunakannya?
Mircea Vutcovici
Yah saya hanya memasukkan mod_negotiation di httpd.conf, maka opsi MultiViews di VirtualHost harus cukup untuk melakukan apa yang saya cari, sejauh yang saya tahu .. bukan?
lorenzo.marcon
3
FWIW, saya punya masalah dengan ini +MultiViewsdiaktifkan, dan menghilang setelah menonaktifkannya.
Felix Frank

Jawaban:

39

Saya menemukan solusinya. Sangat mudah, memang. Saya lupa menyertakan yang berikut ini:

AddType application/x-httpd-php .php

ke dalam bagian mod_mime apache ke httpd.conf

Saya disesatkan oleh fakta bahwa skrip php berfungsi dengan benar; Namun negosiasi gagal karena negosiasi mod_n hanya mencari jenis file "menarik" (dan dikenal).

lorenzo.marcon
sumber
3
Ini! Ini DI SINI! Menghabiskan sebagian besar malam untuk mencari tahu mengapa saya mendapatkan kesalahan "File yang Ditemukan / Tidak Ada yang Dinegosiasikan" yang sangat tidak membantu. Script telah bekerja dengan baik sebelumnya, dan saya memiliki setan waktu melacak fakta bahwa tipe tidak dimasukkan dalam mod_mime pada distribusi yang saya uji. Aku berhutang bir padamu.
Akoi Meexx
Saya akan dengan senang hati menerima bir Anda ketika saya akan datang ke AS :)
lorenzo.marcon
ini bekerja dengan sempurna !! @ lorenzo.marcon terima kasih atas pertanyaan dan jawabannya!
rogcg
Ini pasti telah berubah di beberapa titik. Saya merasa cukup percaya diri saya tidak perlu menambahkan ini sebelumnya agar php MultiViews bekerja.
user1338062
Terima kasih banyak metrik! Saya membenturkan kepala ke dinding, bertanya-tanya mengapa mod saya menulis ulang dari search /? $ Ke search.php tidak berfungsi. Tampaknya modul negosiasi memiliki prioritas lebih tinggi daripada modul penulisan ulang yang umumnya baik untuk diketahui.
zıəs u 19s
12

Saya memiliki masalah yang sama setelah memperbarui dari Debian Squeeze ke Wheezy. The mods-enabled/mime.conftermasuk jenis file yang dikenal dari sistem:

TypesConfig /etc/mime.types

Masalahnya adalah /etc/mime.typesfile digantikan oleh pembaruan dan di file yang diganti, bagian PHP dikomentari. Saat mencarinya, saya menemukan:

#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

Saya harus menghapus #dari setiap baris yang berisi hal-hal yang relevan dengan php, kemudian menyimpan dan memulai kembali server web Apache. Itu memecahkan masalah tanpa memodifikasi mime.conffile.

derHippeChip
sumber
Ini menyelamatkan saya setelah 4 jam tanpa henti debugging terhadap hantu.
MarkSkayff
Sadarilah bahwa melakukan hal ini dapat membuat libapache-mod-php5file eksekusi dengan .phpnama (seperti filename.php.jpeg) yang merupakan alasan asli untuk berkomentar. Lihat bugs.debian.org/589384
Kevinoid