mod_headers nie wysyła nagłówków, gdy plik to PHP

9

Mam plik .htaccess ustawiony na:

 Header set MyHeader "I'm Set!"

Jeśli przejdę do tego katalogu ( http://example.com/test/), który nie ma domyślnego pliku indeksu i przejrzę aktywność sieciową (w tym przypadku z Chrome), widzę, że nagłówek jest wysyłany. Jeśli przejdę do pliku php ( http://example.com/test/test.php), nagłówek nie zostanie wysłany.

Utworzyłem index.html (z samą <pre>Hitreścią) i jest on wysyłany. Zmieniam nazwę pliku na .php, bez nagłówka. Jeśli zmienię orignal test.phpna test.html, wyświetla kod śmieciowy i nagłówek jest wysyłany. Jeśli zmienię test.phpna test.png, otrzymuję ikonę uszkodzonego obrazu i nagłówek zostanie wysłany.

Tak więc, bez testowania poza powyższym pod względem typu MIME i rozszerzeń plików, wydaje się, że tylko .phppliki (legalne lub inne) są ustawione tak, aby nie miały zastosowania reguły .htaccess, a konkretnie dyrektywy mod_headers. Ale nie wiem, jak to przetestować, a ponieważ jest to serwer współdzielony, nie mam httpd.confdostępu do szukania.

Jakieś pomysły na to, dlaczego apache pomija wysyłanie nagłówków plików php?

Próbowałem też:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Anthony
źródło
Wydaje się, że aktualizacja z PHP / CGI do PHP / FastCGI to naprawiła. Nadal bardzo chętnie otrzymam informację zwrotną, jeśli ktoś wie, co było przyczyną.
Anthony
1
Anthony, używałeś mod_fastcgi? Doświadczam dokładnie tego samego zachowania i wydaje mi się, że mod_fastcgi psuje funkcjonalność mod_headers. Wczoraj opublikowałem ten raport o błędzie: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem
to samo tutaj: / jakieś wiadomości lub obejście tego? Nie mogę sobie wyobrazić, że nie jest to problem w większej liczbie przypadków ...
Adrian Föder

Odpowiedzi:

4

Jest to oczekiwane zachowanie podczas uruchamiania skryptów CGI. Z najnowszej (2.4) wersji dokumentacji mod_headers :

Domyślna wartość onsuccess może wymagać zmiany na zawsze w okolicznościach podobnych do wymienionych poniżej. Należy również zauważyć, że powtórzenie tej dyrektywy z obydwoma warunkami ma sens w niektórych scenariuszach, ponieważ zawsze nie jest nadzieją sukcesu w odniesieniu do istniejących nagłówków:

[...]
Zmieniasz lub usuwasz nagłówek wygenerowany przez skrypt CGI, w którym to przypadku skrypty CGI znajdują się w tabeli odpowiadającej zawsze, a nie w tabeli domyślnej.

Pierwotny problem (z być może lepszym wyjaśnieniem) znajduje się w błędzie 49308 .

Andrew M.
źródło
Jeśli czytam to poprawnie, użycie Header always set MyHeader "I'm Set!"powinno rozwiązać problem. Myślę, że znalazłem odpowiedź, gdzie ktoś to zasugerował, i to nie zadziałało dla OP w tym przypadku. Ale jestem też całkiem pewien, że powiedzieli, by spróbować Header set always, i być może dlatego ta sugestia zawiodła.
Anthony,
Nie, cofam to. Ctrl-z'd do tej próby i tak było Header always set. Czy po prostu źle czytam cytat?
Anthony,
W pierwotnym pytaniu nie ma tego określonego; czy jesteś pewien, że jest ustawiony? Header always set MyHeader "I'm Set!"Według twojego przykładu powinno to być coś podobnego .
Andrew M.,
Cóż, próbowałem, ale bez aprobaty Apache, więc mogłem zrezygnować z jednej próby. A teraz, gdy działa, utknąłem z założeniem, że to przejście z CGI na FastCGI, ale jestem podejrzliwy.
Anthony,