아파치 파일 협상 실패 All </Directory> 또한 mod_rewrite다음

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>