ฉันมีปัญหาดังต่อไปนี้ในโฮสต์ที่ใช้ 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 ระหว่างตัวเลือกสำหรับ virtualhost ที่เกี่ยวข้อง:
<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 ที่ควรทำ)
UPDATE:ฉันสังเกตเห็นว่า mod_negotiation ทำงานอย่างถูกต้องกับไฟล์ที่มีนามสกุลแตกต่างจาก. php: ดังนั้นหากฉันมีไฟล์ชื่อ /admin/contents.txt ฉันสามารถเข้าถึงเบราว์เซอร์ที่มี / admin / content url ได้ ดังนั้นปัญหาจึงเป็นเพียงไฟล์ php เบาะแสอะไรที่ทำให้การเจรจาล้มเหลว
+MultiViews
เปิดใช้งานและมันหายไปเมื่อปิดการใช้งาน