mod_headers tidak mengirim header saat file PHP

9

Saya telah mengatur file .htaccess saya sebagai berikut:

 Header set MyHeader "I'm Set!"

Jika saya pergi ke direktori itu ( http://example.com/test/), yang tidak memiliki file indeks default, dan melihat aktivitas jaringan (dalam hal ini dengan Chrome), saya dapat melihat bahwa header sedang dikirim. Jika saya membuka file php ( http://example.com/test/test.php), header tidak dikirim.

Saya telah membuat index.html (hanya <pre>Hidengan konten) dan dikirim. Saya mengubah nama file menjadi .php, tanpa header. Jika saya mengubah orignal test.phpke test.html, itu output kode yang tampak sampah, dan header dikirim. Jika saya mengubah test.phpke test.png, saya mendapatkan ikon gambar yang rusak, dan header dikirim.

Jadi, tanpa pengujian di atas hal-hal di atas dalam hal tipe-mime dan ekstensi file, tampaknya hanya .phpfile (yang sah atau tidak) yang diatur untuk tidak memiliki aturan .htaccess berlaku atau secara khusus arahan mod_headers. Tetapi saya tidak tahu bagaimana cara menguji ini dan karena ini adalah server bersama, saya tidak memiliki httpd.confakses untuk melihat-lihat.

Adakah alasan mengapa apache melewatkan pengiriman header untuk file php?

Saya juga sudah mencoba:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Anthony
sumber
Memperbarui dari PHP / CGI ke PHP / FastCGI tampaknya telah memperbaikinya. Saya masih sangat ingin mendapatkan umpan balik jika ada yang tahu apa penyebab dasarnya.
Anthony
1
Anthony, apakah Anda menggunakan mod_fastcgi? Saya mengalami perilaku yang persis sama dan menurut saya mod_fastcgi merusak fungsionalitas mod_headers. Saya memposting laporan bug ini kemarin: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem
sama di sini: / ada berita atau solusi itu? Saya tidak bisa membayangkan ini bukan masalah dalam banyak kasus di luar sana ...
Adrian Föder

Jawaban:

4

Ini adalah perilaku yang diharapkan saat menjalankan skrip CGI. Dari versi terbaru (2.4) dari dokumen mod_headers :

Nilai default onsuccess mungkin perlu diubah untuk selalu dalam keadaan yang mirip dengan yang tercantum di bawah ini. Perhatikan juga bahwa mengulangi arahan ini dengan kedua kondisi masuk akal dalam beberapa skenario karena selalu bukan superset dari onsuccess sehubungan dengan header yang ada:

[...]
Anda memodifikasi atau menghapus header yang dibuat oleh skrip CGI, dalam hal ini skrip CGI ada di tabel yang sesuai dengan selalu dan tidak di tabel default.

Masalah aslinya (dengan, mungkin, penjelasan yang lebih baik) ada di Bug 49308 .

Andrew M.
sumber
Jika saya membacanya dengan benar, menggunakan Header always set MyHeader "I'm Set!"seharusnya memecahkan masalah. Saya pikir saya menemukan jawaban di mana seseorang menyarankan itu dan itu tidak berhasil untuk OP dalam kasus itu juga. Tetapi saya juga cukup yakin mereka mengatakan untuk mencoba Header set always, yang mungkin mengapa saran itu gagal.
Anthony
Tidak, saya ambil kembali. Saya ctrl-z'd untuk upaya itu dan itu Header always set. Apakah saya salah membaca kutipan?
Anthony
Dalam pertanyaan awal Anda, Anda tidak memiliki yang ditentukan; apakah kamu yakin set? Itu harus seperti Header always set MyHeader "I'm Set!", sesuai dengan contoh Anda.
Andrew M.
Yah, saya memang mencobanya, meskipun tanpa dukungan Apache, jadi saya mungkin menyerah pada satu percobaan. Dan sekarang sudah berfungsi, saya terjebak dengan hanya menganggap itu adalah beralih dari CGI ke FastCGI, tapi saya curiga di sekitar.
Anthony