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.