Estou tendo o seguinte problema em um host usando o Apache 2.2.22 + PHP 5.4.0
Preciso fornecer o arquivo /home/server1/htdocs/admin/contents.php
quando um usuário faz a solicitação http://server1/admin/contents
:, mas recebo esta mensagem no servidor error_log.
Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)
Observe que eu mod_negotiation
habilitei e MultiViews entre as opções para o host virtual 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 .htaccess
regras:
<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. Estou apenas tentando uma atualização para o PHP 5.4.0, mas não consigo resolver esse problema de negociação. Alguma idéia de por que o Apache não pode corresponder contents.php
ao pedir content
(qual deveria ser o que a negociação de modificação deveria fazer)?
ATUALIZAÇÃO: Percebi que a negociação de mod_nós se comporta corretamente com arquivos com extensão diferente de .php: por isso, se eu tiver um arquivo chamado /admin/contents.txt, posso acessá-lo regularmente com o navegador com / admin / contents url. Portanto, o problema é apenas para arquivos php. Alguma pista sobre o que poderia fazer a negociação falhar?
fonte
+MultiViews
ativado, e ele desapareceu ao desativá-lo.Respostas:
Eu encontrei a solução. Muito fácil mesmo. Esqueci de incluir o seguinte:
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 falhou porque mod_negotiation somente procura por tipos de arquivos "interessantes" (e conhecidos).
fonte
Eu tive o mesmo problema depois de atualizar o Debian Squeeze para o Wheezy. Isso
mods-enabled/mime.conf
inclui os tipos de arquivos conhecidos do sistema:O problema era que o
/etc/mime.types
arquivo foi substituído pela atualização e, no arquivo substituído, a parte do PHP foi comentada. Ao procurá-lo, encontrei:Eu tive que remover o
#
de cada linha contendo material relevante para php, salvar e reiniciar o servidor da web Apache. Isso resolveu o problema sem modificar omime.conf
arquivo.fonte
libapache-mod-php5
arquivos executados.php
no nome (comofilename.php.jpeg
), que era a lógica original para comentá-los. Veja bugs.debian.org/589384Em vez de mapear
.php
para um tipo de mídia (que pode ter implicações de segurança, conforme descrito no Debian Bug 589384 que os desativou), você pode configurarMultiviewsMatch
para corresponder arquivos sem um tipo para.php
, como sugerido na resposta de Mark Amery para uma pergunta semelhante :fonte