A negociação do arquivo Apache falhou

21

Estou tendo o seguinte problema em um host usando o Apache 2.2.22 + PHP 5.4.0

Eu preciso fornecer o arquivo /home/server1/htdocs/admin/contents.php quando um usuário fizer a solicitação: http://server1/admin/contents , mas obtenho essa mensagem no servidor error_log.

Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)

Observe que tenho mod_negotiation ativado e MultiViews entre as opções do virtualhost relacionado:

<Directory "/home/server1/htdocs">
    Options Indexes Includes FollowSymLinks MultiViews
    Order allow,deny
    Allow from all
    AllowOverride All
</Directory>

Eu também uso mod_rewrite , com as seguintes regras .htaccess :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>

Parece muito estranho, mas na mesma caixa do PHP 5.3.6 costumava funcionar corretamente. Eu estou apenas tentando uma atualização para o PHP 5.4.0, mas não posso resolver este problema de negociação. Alguma idéia do motivo pelo qual o Apache não pode corresponder a contents.php quando perguntando por content (qual deve ser o objetivo da mod_negotiation)?

UPDATE: notei que mod_negotiation se comporta corretamente com arquivos com extensão diferente de .php: então se eu tivesse um arquivo chamado /admin/contents.txt, eu poderia acessá-lo regularmente com o arquivo navegador com o URL / admin / contents. Então o problema é apenas para arquivos php. Alguma pista sobre o que poderia fazer a negociação falhar?

    
por lorenzo.marcon 23.03.2012 / 14:44

2 respostas

38

Eu encontrei a solução. Muito fácil, de fato. Esqueci de incluir o seguinte:

AddType application/x-httpd-php .php

na seção apache mod_mime em httpd.conf

Eu fui enganado pelo fato de que os scripts php estavam funcionando corretamente; no entanto, a negociação estava falhando porque mod_negotiation procura apenas tipos de arquivos "interessantes" (e conhecidos).

    
por 24.03.2012 / 18:20
12

Eu tive o mesmo problema depois de atualizar do Debian Squeeze para o Wheezy. O mods-enabled/mime.conf inclui os tipos de arquivos conhecidos do sistema:

TypesConfig /etc/mime.types

O problema foi que o arquivo /etc/mime.types foi substituído pela atualização e no arquivo substituído, a parte do PHP foi comentada. Ao procurar por ele, eu encontrei:

#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

Eu tive que remover o # de cada linha contendo material relevante ao php, depois salve e reinicie o servidor web Apache. Isso resolveu o problema sem modificar o arquivo mime.conf .

    
por 11.01.2014 / 07:59