Negoziazione del file Apache non riuscita


23

Sto riscontrando il seguente problema su un host usando Apache 2.2.22 + PHP 5.4.0

Devo fornire il file /home/server1/htdocs/admin/contents.phpquando un utente effettua la richiesta http://server1/admin/contents:, ma ottengo questo messaggio sul server error_log.

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

Si noti che ho mod_negotiationabilitato e MultiView tra le opzioni per il virtualhost correlato:

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

Uso anche mod_rewrite, con le seguenti .htaccessregole:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

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

Sembra molto strano, ma sullo stesso riquadro con PHP 5.3.6 funzionava correttamente. Sto solo provando un aggiornamento a PHP 5.4.0, ma non riesco a risolvere questo problema di negoziazione. Qualche idea sul perché Apache non può corrispondere contents.phpquando si chiede content(quale dovrebbe essere ciò che mod_negotiation dovrebbe fare)?

AGGIORNAMENTO: Ho notato che mod_negotiation si comporta correttamente con file con estensione diversa da .php: quindi se avessi un file chiamato /admin/contents.txt, posso accedervi regolarmente con il browser con / admin / contents url. Quindi il problema è solo per i file php. Qualche idea su cosa potrebbe far fallire la negoziazione?


Come si configura mod_negotiation? Lo stai usando?
— Mircea Vutcovici,

Bene, includo mod_negotiation in httpd.conf, quindi le opzioni MultiViews in VirtualHost dovrebbero essere sufficienti per fare quello che sto cercando, per quanto ne so .. non è vero?
— lorenzo.marcon,

3
FWIW, ho avuto questo problema con +MultiViewsabilitato e è scomparso dopo averlo disabilitato.
— Felix Frank,

Risposte:


39

Ho trovato la soluzione Davvero molto semplice. Ho dimenticato di includere quanto segue:

AddType application/x-httpd-php .php

nella sezione mod_mime di apache in httpd.conf

Sono stato fuorviato dal fatto che gli script php funzionavano correttamente; tuttavia la negoziazione non è riuscita perché mod_negotiation cerca solo tipi di file "interessanti" (e noti).


3
Questo! Questo diritto QUI! Ho passato la maggior parte della notte a cercare perché stavo ricevendo l'errore molto inutile "File scoperti / Nessuno negoziato". Gli script avevano funzionato bene prima, e ho avuto un diavolo di tempo per rintracciare il fatto che il tipo non era stato incluso in mod_mime sulla distribuzione su cui stavo testando. Ti devo una birra, signore.
— Akoi Meexx,

Accetterò volentieri la tua birra quando verrò negli Stati Uniti :)
— lorenzo.marcon il

funziona perfettamente !! @ lorenzo.marcon grazie per la domanda e la risposta!
— rogcg,

Questo deve essere cambiato ad un certo punto. Sono abbastanza fiducioso di non aver bisogno di aggiungerlo prima per far funzionare PhV MultiView.
— user1338062

Grazie mille! Stavo sbattendo la testa contro il muro, chiedendomi perché la mia mod riscrittura da search /? $ A search.php non funzionasse. Sembra che il modulo di negoziazione abbia la precedenza sul modulo di riscrittura che è generalmente buono a sapersi.
— sei il

12

Ho avuto lo stesso problema dopo l'aggiornamento da Debian Squeeze a Wheezy. Il mods-enabled/mime.confinclude i tipi di file conosciuti dal sistema:

TypesConfig /etc/mime.types

Il problema era che il /etc/mime.typesfile è stato sostituito dall'aggiornamento e nel file sostituito, la parte PHP è stata commentata. Durante la ricerca, ho trovato:

#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

Ho dovuto rimuovere il #da ogni riga contenente materiale rilevante per php, quindi salvare e riavviare il web server Apache. Ciò ha risolto il problema senza modificare il mime.conffile.


Questo mi ha salvato dopo 4 ore di debug senza fine contro un fantasma.
— MarkSkayff,

Essere consapevoli del fatto che ciò potrebbe far libapache-mod-php5eseguire i file con .phpil nome (come filename.php.jpeg) che era la logica originale per commentarli. Vedi bugs.debian.org/589384
— Kevinoid

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.