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, без заголовка. Якщо я зміню оригінал test.phpна test.html, він видає код, який виглядає сміттям, і заголовок відправляється. Якщо я перейду test.phpдо test.png, я отримаю піктограму зламаного зображення, і заголовок буде надісланий.

Таким чином, без тестування за викладеним вище з точки зору типу mime та розширення файлів, видається, що лише у .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 :

Значення типового успіху за замовчуванням, можливо, потрібно змінити так, щоб завжди було обставин, подібних до перелічених нижче. Зауважимо також, що повторення цієї директиви з обома умовами має сенс у деяких сценаріях, оскільки завжди не є набором успіху стосовно існуючих заголовків:

[...]
Ви змінюєте або видаляєте заголовок, створений сценарієм CGI, і в цьому випадку сценарії CGI знаходяться в таблиці, що відповідає завжди, а не в таблиці за замовчуванням.

Оригінальний випуск (мабуть, з кращим поясненням) знаходиться в програмі Bug 49308 .


Якщо я читаю це правильно, користування Header always set MyHeader "I'm Set!"повинно було вирішити проблему. Думаю, я знайшов відповідь, де хтось запропонував це, і він теж не працював для ОП. Але я також впевнений, що вони сказали, що спробувати Header set always, через що ця пропозиція не вдалася.
Ентоні

Ні, я беру це назад. Я ctrl-z'd до цієї спроби, і це було Header always set. Я просто неправильно читаю цитату?
Ентоні

У своєму первісному запитанні ви цього не вказали; Ви впевнені, що його встановлено? Це має бути щось на зразок Header always set MyHeader "I'm Set!"вашого прикладу.
Ендрю М.

Що ж, я спробував це, хоча без схвалення Apache, тому я, можливо, відмовився від однієї спроби. І тепер, коли це працює, я застряг лише припускаючи, що це був перехід від CGI до FastCGI, але я навколо все підозрюю.
Ентоні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.