mod_headers non invia intestazioni quando il file è PHP


9

Il mio file .htaccess è impostato come segue:

 Header set MyHeader "I'm Set!"

Se vado in quella directory ( http://example.com/test/), che non ha un file indice predefinito, e visualizzo l'attività di rete (in questo caso con Chrome), vedo che viene inviata l'intestazione. Se vado a un file php ( http://example.com/test/test.php), l'intestazione non viene inviata.

Ho creato un index.html (con semplicemente <pre>Hicome contenuto) e viene inviato. Cambio il nome del file in .php, nessuna intestazione. Se cambio l'originale test.phpin test.html, viene emesso il codice spazzatura e viene inviata l'intestazione. Se cambio test.phpa test.png, ricevo l'icona di un'immagine rotta e l'intestazione viene inviata.

Quindi, senza testare oltre quanto sopra in termini di tipo mime ed estensioni di file, sembra che solo i .phpfile (legittimi o di altro tipo) siano impostati per non applicare regole .htaccess o in particolare le direttive mod_headers. Ma non so come testarlo e dato che si tratta di un server condiviso, non ho httpd.confaccesso a curiosare.

Qualche idea sul perché Apache salta l'invio delle intestazioni per i file php?

Ho anche provato:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>

L'aggiornamento da PHP / CGI a PHP / FastCGI sembra averlo corretto. Sono ancora molto ansioso di ricevere feedback se qualcuno sa quale fosse la causa principale.
Anthony,

1
Anthony, hai usato mod_fastcgi? Provo esattamente lo stesso comportamento e mi sembra che mod_fastcgi spezzi la funzionalità mod_headers. Ieri ho pubblicato questa segnalazione di bug: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem,

stesso qui: / qualche notizia o soluzione? Non riesco a immaginare che questo non sia un problema in più casi là fuori ...
Adrian Föder,

Risposte:


4

Questo è un comportamento previsto quando si eseguono script CGI. Dall'ultima versione (2.4) dei documenti mod_headers :

Potrebbe essere necessario modificare il valore predefinito di onsuccess in sempre in circostanze simili a quelle elencate di seguito. Si noti inoltre che ripetere questa direttiva con entrambe le condizioni ha senso in alcuni scenari perché non è sempre un superset di successo rispetto alle intestazioni esistenti:

[...]
Stai modificando o rimuovendo un'intestazione generata da uno script CGI, nel qual caso gli script CGI sono nella tabella corrispondente a sempre e non nella tabella predefinita.

Il problema originale (con, forse, una spiegazione migliore) è nel Bug 49308 .


Se lo sto leggendo correttamente, l'utilizzo Header always set MyHeader "I'm Set!"dovrebbe aver risolto il problema. Penso di aver trovato una risposta in cui qualcuno l'ha suggerito e in quel caso non ha funzionato neanche per l'OP. Ma sono anche abbastanza sicuro che hanno detto di provare Header set always, il che potrebbe essere stato il motivo per cui quel suggerimento è fallito.
Anthony,

No, lo riprendo. Ho premuto Ctrl-Z per quel tentativo ed è stato Header always set. Sto solo leggendo male la citazione?
Anthony,

Nella tua domanda originale non hai specificato; sei sicuro che sia impostato? Dovrebbe essere qualcosa del genere Header always set MyHeader "I'm Set!", secondo il tuo esempio.
Andrew M.

Beh, l'ho provato, anche se senza l'approvazione di Apache, quindi potrei aver rinunciato a un tentativo. E ora che funziona, sono bloccato solo supponendo che fosse il passaggio da CGI a FastCGI, ma sono sospettoso dappertutto.
Anthony,
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.