Đàm phán tệp Apache không thành công


23

Tôi đang gặp sự cố sau trên máy chủ lưu trữ bằng Apache 2.2.22 + PHP 5.4.0

Tôi cần cung cấp tệp /home/server1/htdocs/admin/contents.phpkhi người dùng thực hiện yêu cầu: http://server1/admin/contentsnhưng tôi nhận được thông báo này trên máy chủ error_log.

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

Lưu ý rằng tôi đã mod_negotiationkích hoạt và MultiViews trong số các tùy chọn cho virtualhost liên quan:

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

Tôi cũng sử dụng mod_rewrite, với các .htaccessquy tắc sau :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

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

Có vẻ rất lạ, nhưng trên cùng một hộp với PHP 5.3.6, nó được sử dụng để hoạt động chính xác. Tôi chỉ đang thử nâng cấp lên PHP 5.4.0, nhưng tôi không thể giải quyết vấn đề đàm phán này. Bất kỳ ý tưởng nào về lý do tại sao Apache không thể phù hợp contents.phpkhi yêu cầu content(đó phải là điều mà mod_negotiation phải làm)?

CẬP NHẬT: Tôi nhận thấy rằng mod_negotiation hoạt động chính xác với các tệp có phần mở rộng khác với .php: vì vậy nếu tôi có một tệp có tên /admin/contents.txt, tôi có thể truy cập nó theo quy định với url / admin / nội dung. Vì vậy, vấn đề chỉ dành cho các tập tin php. Bất kỳ manh mối về những gì có thể làm cho cuộc đàm phán thất bại?


Làm thế nào để bạn cấu hình mod_negotiation? Bạn đang sử dụng nó?
Mircea Vutcovici

Chà, tôi chỉ bao gồm mod_negotiation trong httpd.conf, sau đó các tùy chọn MultiViews trong Virtualhost sẽ đủ để làm những gì tôi đang tìm kiếm, theo như tôi biết .. phải không?
lorenzo.marcon

3
FWIW, tôi đã gặp vấn đề này khi +MultiViewskích hoạt và nó biến mất khi vô hiệu hóa nó.
Felix Frank

Câu trả lời:


39

Tôi tìm thấy giải pháp. Rất dễ dàng, thực sự. Tôi quên bao gồm những điều sau đây:

AddType application/x-httpd-php .php

vào phần apache mod_mime vào httpd.conf

Tôi đã bị lừa bởi thực tế là các tập lệnh php đã hoạt động chính xác; tuy nhiên, cuộc đàm phán đã thất bại vì mod_negotiation chỉ tìm các loại tệp "thú vị" (và đã biết).


3
Điều này! Điều này đúng TẠI ĐÂY! Đã dành hầu hết các đêm để tìm hiểu lý do tại sao tôi nhận được lỗi "Tập tin được phát hiện / Không thương lượng" rất không có ích. Các kịch bản đã hoạt động tốt trước đó và tôi đã có một thời gian theo dõi thực tế rằng loại này không được đưa vào mod_mime trên bản phân phối mà tôi đang thử nghiệm. Em nợ anh bia.
Akoi Meexx

Tôi sẵn sàng nhận bia của bạn khi tôi đến Mỹ :)
lorenzo.marcon

cái này hoạt động hoàn hảo !! @ lorenzo.marcon cảm ơn câu hỏi và câu trả lời!
rogcg

Điều này đã phải thay đổi tại một số điểm. Tôi cảm thấy khá tự tin Tôi không cần phải thêm cái này sớm hơn để php MultiViews hoạt động.
user1338062

Cảm ơn một tấn! Tôi đang đập đầu vào tường, tự hỏi tại sao mod của tôi viết lại từ search /? $ Sang search.php không hoạt động. Có vẻ như mô-đun báo cáo đã được ưu tiên hơn mô-đun viết lại thường là điều tốt để biết.
zıəs uɐɟəʇs

12

Tôi gặp vấn đề tương tự sau khi cập nhật từ Debian Squeeze sang Wheezy. Các mods-enabled/mime.confbao gồm các kiểu tệp đã biết từ hệ thống:

TypesConfig /etc/mime.types

Vấn đề là /etc/mime.typestệp đã được thay thế bởi bản cập nhật và trong tệp được thay thế, phần PHP đã được nhận xét. Khi tìm kiếm nó, tôi tìm thấy:

#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

Tôi đã phải xóa #từ mỗi dòng có chứa những thứ liên quan đến php, sau đó lưu và khởi động lại máy chủ web Apache. Điều đó đã giải quyết vấn đề mà không sửa đổi mime.conftập tin.


Điều này đã cứu tôi sau 4 giờ không ngừng gỡ lỗi với một con ma.
MarkSkayff

Xin lưu ý rằng việc này có thể thực libapache-mod-php5hiện các tệp có .phptên (như filename.php.jpeg) là lý do ban đầu để nhận xét chúng. Xem bug.debian.org/589384
Kevinoid

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.