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 파일에만 해당됩니다. 협상이 실패 할 수있는 것에 대한 단서가 있습니까?
답변
해결책을 찾았습니다. 실제로 매우 쉽습니다. 나는 다음을 포함하는 것을 잊었다.
AddType application/x-httpd-php .php
아파치 mod_mime 섹션에 httpd.conf
PHP 스크립트가 올바르게 작동한다는 사실에 오해가있었습니다. 그러나 mod_negotiation은 “흥미로운”(및 알려진) 파일 형식 만 찾기 때문에 협상이 실패했습니다.
답변
Debian Squeeze에서 Wheezy로 업데이트 한 후에도 같은 문제가 발생했습니다. mods-enabled/mime.conf
시스템에서 알려진 파일 형식 이 포함됩니다.
TypesConfig /etc/mime.types
문제는 /etc/mime.types
파일이 업데이트로 교체되었고 교체 된 파일에서 PHP 부분이 주석 처리되었다는 것입니다. 그것을 찾을 때, 나는 발견했다 :
#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
#
PHP 관련 항목이 포함 된 각 줄에서 를 제거한 다음 Apache 웹 서버를 저장하고 다시 시작해야했습니다. mime.conf
파일 을 수정하지 않고 문제를 해결했습니다 .
답변
.php
미디어 유형 에 매핑 하는 대신 ( 데비안 버그 589384에 설명 된 것처럼 보안에 영향을 줄 수 있음) 비슷한 질문에 대한 Mark Amery의 답변 에서 제안한 것처럼에 MultiviewsMatch
대한 유형없이 파일과 일치 하도록 구성 할 수 있습니다 ..php
<Files "*.php">
MultiviewsMatch Any
</Files>