아파치 파일 협상 실패


23

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 파일에만 해당됩니다. 협상이 실패 할 수있는 것에 대한 단서가 있습니까?


mod_negotiation을 어떻게 구성합니까? 당신은 그것을 사용하고 있습니까?
Mircea Vutcovici

글쎄, httpd.conf에 mod_negotiation을 포함시킨 다음 VirtualHost의 MultiViews 옵션은 내가 아는 한 원하는 것을 수행하기에 충분해야합니다.
lorenzo.marcon

3
FWIW, 나는이 문제를 +MultiViews사용하도록 설정 했으며 사용하지 않을 때 사라졌습니다.
Felix Frank

답변:


39

해결책을 찾았습니다. 실제로 매우 쉽습니다. 나는 다음을 포함하는 것을 잊었다.

AddType application/x-httpd-php .php

아파치 mod_mime 섹션에 httpd.conf

PHP 스크립트가 올바르게 작동한다는 사실에 오해가있었습니다. 그러나 mod_negotiation은 "흥미로운"(및 알려진) 파일 형식 만 찾기 때문에 협상이 실패했습니다.


3
이! 바로 여기! 내가 도움이되지 않는 "발견 된 파일 (들) / 무 협상 (None Negotiated)"오류가 발생하는 이유를 대부분 밤새 사냥했습니다. 스크립트는 이전에는 잘 작동했지만 테스트 할 배포판에서 mod_mime에 유형이 포함되지 않았다는 사실을 추적하는 데 어려움을 겪었습니다. 나는 당신에게 맥주 선생님에게 빚진.
Akoi Meexx

나는 미국에 올 때 당신의 맥주를 기꺼이 받아 들일 것입니다 :)
lorenzo.marcon

이것은 완벽하게 작동합니다! @ lorenzo.marcon 질문과 답변에 감사드립니다!
rogcg 2016 년

이것은 어느 시점에서 변경되었을 것입니다. 나는 PHP MultiViews가 작동하기 위해 이것을 일찍 추가 할 필요가 없다고 확신합니다.
user1338062

미터 톤 감사합니다! 나는 왜 내 모드가 search /? $에서 search.php로 다시 작성되는지 궁금해 벽에 부딪쳤다. 협상 모듈이 일반적으로 알고있는 재 작성 모듈보다 우선합니다.
zıəs uɐɟəʇs

12

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파일 을 수정하지 않고 문제를 해결했습니다 .


이것은 유령에 대한 끝없는 디버깅의 4 시간 후에 저를 구했습니다.
MarkSkayff 2018 년

이 작업을 수행하면 libapache-mod-php5파일 을 주석 처리하기위한 원래의 근거 인 .php이름 (예 :)으로 파일을 실행할 수 있습니다 filename.php.jpeg.
Kevinoid

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.