mod_headers sendet keine Header, wenn die Datei PHP ist

9

Ich habe meine .htaccess-Datei wie folgt eingestellt:

 Header set MyHeader "I'm Set!"

Wenn ich zu diesem Verzeichnis ( http://example.com/test/) gehe , das keine Standardindexdatei enthält, und die Netzwerkaktivität (in diesem Fall mit Chrome) ansehe, kann ich sehen, dass der Header gesendet wird. Wenn ich zu einer PHP-Datei ( http://example.com/test/test.php) gehe , wird der Header nicht gesendet.

Ich habe eine index.html erstellt (mit einfach <pre>Hials Inhalt) und sie wird gesendet. Ich ändere den Dateinamen in .php, kein Header. Wenn ich das Original test.phpin ändere test.html, wird der Code ausgegeben , der nach Müll aussieht , und der Header wird gesendet. Wenn ich zu wechsle test.php, test.pngwird ein fehlerhaftes Bildsymbol angezeigt und der Header wird gesendet.

Ohne über die oben genannten hinausgehende Tests in Bezug auf MIME-Typ und Dateierweiterungen hinaus scheinen nur .phpDateien (legitim oder anderweitig) so eingestellt zu sein, dass entweder keine .htaccess-Regeln gelten oder speziell die Anweisungen mod_headers. Aber ich weiß nicht, wie ich das testen soll, und da es sich um einen gemeinsam genutzten Server handelt, habe ich keinen httpd.confZugriff darauf , mich umzuschauen.

Irgendwelche Ideen, warum Apache das Senden von Headern für PHP-Dateien überspringen würde?

Ich habe auch versucht:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Anthony
quelle
Das Update von PHP / CGI auf PHP / FastCGI scheint das Problem behoben zu haben. Ich bin immer noch sehr gespannt auf Feedback, wenn jemand weiß, was die Hauptursache war.
Anthony
1
Anthony, hast du mod_fastcgi benutzt? Ich habe genau das gleiche Verhalten und es scheint mir, dass mod_fastcgi die Funktionalität von mod_headers unterbricht. Ich habe diesen Fehlerbericht gestern gepostet: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem
Gleiches hier: / Gibt es Neuigkeiten oder Problemumgehungen? Ich kann mir nicht vorstellen, dass dies in mehr Fällen kein Problem ist ...
Adrian Föder

Antworten:

4

Dies ist das erwartete Verhalten beim Ausführen von CGI-Skripten. Aus der neuesten (2.4) Version der mod_headers-Dokumente :

Der Standardwert von onsuccess muss möglicherweise unter den unten aufgeführten Umständen auf immer geändert werden. Beachten Sie auch, dass das Wiederholen dieser Anweisung unter beiden Bedingungen in einigen Szenarien sinnvoll ist, da in Bezug auf vorhandene Header immer keine Obermenge des Erfolgs besteht:

[...]
Sie ändern oder entfernen einen von einem CGI-Skript generierten Header. In diesem Fall befinden sich die CGI-Skripte in der Tabelle, die immer und nicht in der Standardtabelle entspricht.

Das ursprüngliche Problem (mit vielleicht einer besseren Erklärung) befindet sich in Bug 49308 .

Andrew M.
quelle
Wenn ich das richtig lese, Header always set MyHeader "I'm Set!"sollte die Verwendung das Problem gelöst haben. Ich glaube, ich habe eine Antwort gefunden, bei der jemand dies vorgeschlagen hat, und es hat auch in diesem Fall für das OP nicht funktioniert. Aber ich bin mir auch ziemlich sicher, dass sie es versuchen wollten Header set always, weshalb dieser Vorschlag möglicherweise fehlgeschlagen ist.
Anthony
Nein, ich nehme es zurück. Ich habe diesen Versuch mit Strg-Z durchgeführt, und das war es auch Header always set. Verstehe ich das Zitat nur falsch?
Anthony
In Ihrer ursprünglichen Frage haben Sie das nicht angegeben; Bist du sicher, dass es eingestellt ist? Es sollte so etwas wie Header always set MyHeader "I'm Set!"nach Ihrem Beispiel sein.
Andrew M.
Nun, ich habe es versucht, allerdings ohne die Zustimmung von Apache, also habe ich vielleicht einen Versuch aufgegeben. Und jetzt, wo es funktioniert, gehe ich davon aus, dass es der Wechsel von CGI zu FastCGI war, aber ich bin rundum misstrauisch.
Anthony