mod_headers n'envoie pas d'en-têtes lorsque le fichier est PHP

9

J'ai mon fichier .htaccess défini comme suit:

 Header set MyHeader "I'm Set!"

Si je vais dans ce répertoire ( http://example.com/test/), qui n'a pas de fichier d'index par défaut, et que je visualise l'activité réseau (dans ce cas avec Chrome), je peux voir que l'en-tête est envoyé. Si je vais dans un fichier php ( http://example.com/test/test.php), l'en-tête n'est pas envoyé.

J'ai créé un index.html (avec simplement <pre>Hicomme contenu) et il est envoyé. Je change le nom du fichier en .php, pas d'en-tête. Si je change l'orignal test.phpen test.html, il produit le code qui ressemble à des ordures et l'en-tête est envoyé. Si je passe test.phpà test.png, j'obtiens une icône d'image cassée et l'en-tête est envoyé.

Ainsi, sans tester au-delà de ce qui précède en termes de type mime et d'extensions de fichiers, il semble que seuls les .phpfichiers (légitimes ou non) sont définis pour ne pas appliquer de règles .htaccess ou spécifiquement les directives mod_headers. Mais je ne sais pas comment tester cela et parce que c'est un serveur partagé, je n'ai pas httpd.confaccès à fouiner.

Des idées sur la raison pour laquelle apache ignorerait l'envoi d'en-têtes pour les fichiers php?

J'ai aussi essayé:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Anthony
la source
La mise à jour de PHP / CGI vers PHP / FastCGI semble l'avoir corrigé. Je suis toujours très désireux d'obtenir des commentaires si quelqu'un sait quelle était la cause profonde.
Anthony
1
Anthony, avez-vous utilisé mod_fastcgi? Je ressens exactement le même comportement et il me semble que mod_fastcgi casse la fonctionnalité mod_headers. J'ai publié ce rapport de bug hier: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem
même ici: / des nouvelles ou une solution? Je ne peux pas imaginer que ce n'est pas un problème dans plus de cas là-bas ...
Adrian Föder

Réponses:

4

Il s'agit d'un comportement attendu lors de l'exécution de scripts CGI. À partir de la dernière version (2.4) des documents mod_headers :

La valeur par défaut de onsuccess peut devoir être modifiée pour toujours dans des circonstances similaires à celles répertoriées ci-dessous. Notez également que la répétition de cette directive avec les deux conditions est logique dans certains scénarios, car il ne s'agit pas toujours d'un sur-ensemble de réussite par rapport aux en-têtes existants:

[...]
Vous modifiez ou supprimez un en-tête généré par un script CGI, auquel cas les scripts CGI sont dans le tableau correspondant à toujours et non dans le tableau par défaut.

Le problème d'origine (avec, peut-être, une meilleure explication) se trouve dans le bogue 49308 .

Andrew M.
la source
Si je lis bien, l'utilisation Header always set MyHeader "I'm Set!"aurait dû résoudre le problème. Je pense que j'ai trouvé une réponse où quelqu'un a suggéré cela et cela n'a pas fonctionné pour le PO dans ce cas non plus. Mais je suis également sûr qu'ils ont dit d'essayer Header set always, ce qui explique peut-être pourquoi cette suggestion a échoué.
Anthony
Non, je le reprends. J'ai appuyé sur cette tentative et c'était le cas Header always set. Suis-je en train de mal lire la citation?
Anthony
Dans votre question d'origine, vous n'avez pas spécifié cela; êtes-vous sûr que son ensemble? Cela devrait être quelque chose comme Header always set MyHeader "I'm Set!", selon votre exemple.
Andrew M.
Eh bien, je l'ai essayé, mais sans l'approbation d'Apache, donc j'ai peut-être abandonné un essai. Et maintenant que cela fonctionne, je suis coincé avec juste en supposant que c'était le passage de CGI à FastCGI, mais je me méfie tout autour.
Anthony