mod_headers не отправляет заголовки, когда файл является PHP

9

Мой файл .htaccess настроен на следующее:

 Header set MyHeader "I'm Set!"

Если я иду в этот каталог ( http://example.com/test/), у которого нет индексного файла по умолчанию, и просматриваю сетевую активность (в данном случае с Chrome), я вижу, что заголовок отправляется. Если я иду в php файл ( http://example.com/test/test.php), заголовок не отправляется.

Я создал index.html (просто <pre>Hiс содержимым), и он отправляется. Я изменяю имя файла на .php, без заголовка. Если я изменяю orignal test.phpна test.html, он выводит код, выглядящий как мусор, и отправляется заголовок. Если я изменяю test.phpна test.png, я получаю значок сломанного изображения, и заголовок отправляется.

Таким образом, без тестирования вышеупомянутого в терминах mime-type и расширений файлов, кажется, что только .phpфайлы (легальные или иные) либо не имеют правил .htaccess, либо, в частности, директивы mod_headers. Но я не знаю, как это проверить, и, поскольку это общий сервер, у меня нет httpd.confдоступа к нему.

Любые идеи относительно того, почему apache будет пропускать отправку заголовков для файлов php?

Я также попробовал:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Энтони
источник
Обновление с PHP / CGI на PHP / FastCGI, кажется, исправило это. Я все еще очень хочу получить обратную связь, если кто-нибудь знает, в чем причина.
Энтони
1
Энтони, ты использовал mod_fastcgi? У меня такое же поведение, и мне кажется, что mod_fastcgi нарушает функциональность mod_headers. Я вчера опубликовал этот отчет об ошибке: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem
то же самое здесь: / какие-либо новости или обходной путь, что? Я не могу себе представить, что это не проблема в большем количестве случаев ...
Адриан Фодер

Ответы:

4

Это ожидаемое поведение при запуске сценариев CGI. Из последней (2.4) версии документации mod_headers :

Может потребоваться изменить значение по умолчанию onsuccess на всегда при обстоятельствах, аналогичных перечисленным ниже. Также обратите внимание, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, потому что всегда не является надмножеством onsuccess по отношению к существующим заголовкам:

[...]
Вы модифицируете или удаляете заголовок, сгенерированный сценарием CGI, и в этом случае сценарии CGI находятся в таблице, соответствующей всегда, а не в таблице по умолчанию.

Первоначальная проблема (возможно, с лучшим объяснением) находится в ошибке 49308 .

Андрей М.
источник
Если я правильно читаю, использование Header always set MyHeader "I'm Set!"должно было решить проблему. Я думаю, что нашел ответ, где кто-то предложил это, и в этом случае он тоже не работал. Но я также почти уверен, что они сказали попробовать Header set always, возможно, именно поэтому это предложение провалилось.
Энтони
Нет, я забираю это. Я попытался это сделать, и это было так Header always set. Я просто неправильно понял цитату?
Энтони
В вашем первоначальном вопросе это не указано; Вы уверены, что его набор? Это должно быть что-то вроде Header always set MyHeader "I'm Set!", согласно вашему примеру.
Андрей М.
Что ж, я попробовал это сделать, хотя и без одобрения Apache, поэтому я мог отказаться от одной попытки. И теперь, когда он работает, я застрял, предполагая, что это был переход с CGI на FastCGI, но я с подозрением отношусь повсюду.
Энтони