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를 활성화하고 :
<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으로 업그레이드하려고하는데이 협상 문제를 해결할 수 없습니다. contents.php
요청할 때 왜 Apache가 일치하지 않는지에 대한 아이디어 content
가 있습니까?
업데이트 : mod_negotiation이 .php와 다른 확장자를 가진 파일에서 올바르게 작동한다는 것을 알았습니다 ./admin/contents.txt라는 파일이 있으면 / admin / contents url을 사용하여 브라우저에서 정기적으로 액세스 할 수 있습니다. 따라서 문제는 PHP 파일에만 해당됩니다. 협상이 실패 할 수있는 것에 대한 단서가 있습니까?
+MultiViews
사용하도록 설정 했으며 사용하지 않을 때 사라졌습니다.