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.php
khi người dùng thực hiện yêu cầu: http://server1/admin/contents
như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_negotiation
kí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 .htaccess
quy 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.php
khi 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?
+MultiViews
kích hoạt và nó biến mất khi vô hiệu hóa nó.