mod_headers não envia cabeçalhos quando o arquivo é PHP

9

Eu tenho meu arquivo .htaccess definido para o seguinte:

 Header set MyHeader "I'm Set!"

Se eu for para esse diretório ( http://example.com/test/), que não possui arquivo de índice padrão, e visualizar a atividade de rede (neste caso, com o Chrome), posso ver que o cabeçalho está sendo enviado. Se eu for para um arquivo php ( http://example.com/test/test.php), o cabeçalho não será enviado.

Eu criei um index.html (simplesmente <pre>Hicomo o conteúdo) e ele é enviado. Eu mudo o nome do arquivo para .php, no header. Se eu alterar o orignal test.phppara test.html, ele gera o código que parece lixo e o cabeçalho é enviado. Se eu mudar test.phppara test.png, recebo um ícone de imagem quebrada e o cabeçalho é enviado.

Portanto, sem testar além do acima em termos de tipo mime e extensões de arquivo, parece que apenas .phparquivos (legítimos ou não) estão configurados para não ter regras .htaccess aplicáveis ​​ou especificamente as diretivas mod_headers. Mas não sei como fazer o teste e, por ser um servidor compartilhado, não tenho httpd.confacesso para mexer.

Alguma idéia de por que o apache pularia o envio de cabeçalhos para arquivos php?

Eu também tentei:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Anthony
fonte
A atualização do PHP / CGI para o PHP / FastCGI parece ter corrigido. Ainda estou muito ansioso para receber feedback, se alguém souber qual foi a causa raiz.
25412 Anthony
1
Anthony, você usou mod_fastcgi? Eu experimento exatamente o mesmo comportamento e parece-me que mod_fastcgi quebra a funcionalidade mod_headers. Eu publiquei
Onkeltem
o mesmo aqui: / alguma notícia ou solução alternativa? Eu não posso imaginar que este não é um problema em mais casos lá fora ...
Adrian Foder

Respostas:

4

Esse é o comportamento esperado ao executar scripts CGI. Na versão mais recente (2.4) dos documentos mod_headers :

O valor padrão do sucesso pode precisar ser alterado para sempre nas circunstâncias semelhantes às listadas abaixo. Observe também que repetir essa diretiva com ambas as condições faz sentido em alguns cenários, porque sempre não é um superconjunto de sucesso em relação aos cabeçalhos existentes:

[...]
Você está modificando ou removendo um cabeçalho gerado por um script CGI; nesse caso, os scripts CGI estão na tabela correspondente a sempre e não na tabela padrão.

A questão original (com, talvez, uma explicação melhor) está no Bug 49308 .

Andrew M.
fonte
Se estou lendo isso corretamente, usar Header always set MyHeader "I'm Set!"deveria ter resolvido o problema. Acho que encontrei uma resposta em que alguém sugeriu isso e também não funcionou para o OP nesse caso. Mas também tenho certeza de que eles disseram para tentar Header set always, e pode ter sido por isso que essa sugestão falhou.
Anthony
Não, eu retiro. Ctrl-z'd para essa tentativa e foi Header always set. Estou apenas interpretando mal a citação?
Anthony
Na sua pergunta original, você não tem isso especificado; você tem certeza que está pronto? Deve ser algo como Header always set MyHeader "I'm Set!", de acordo com o seu exemplo.
Andrew M.
Bem, eu tentei, embora sem o endosso do Apache, então talvez eu tenha desistido de uma tentativa. E agora que está funcionando, estou presumindo apenas que foi a mudança do CGI para o FastCGI, mas desconfio.
Anthony