mod_headers no envía encabezados cuando el archivo es PHP

9

Tengo mi archivo .htaccess configurado de la siguiente manera:

 Header set MyHeader "I'm Set!"

Si voy a ese directorio ( http://example.com/test/), que no tiene un archivo de índice predeterminado, y veo la actividad de la red (en este caso con Chrome), puedo ver que se está enviando el encabezado. Si voy a un archivo php ( http://example.com/test/test.php), el encabezado no se envía.

He creado un index.html (simplemente <pre>Hicomo contenido) y se envía. Cambio el nombre del archivo a .php, sin encabezado. Si cambio el original test.phpa test.html, genera el código de aspecto basura y se envía el encabezado. Si cambio test.phpa test.png, aparece un icono de imagen rota y se envía el encabezado.

Por lo tanto, sin probar más allá de lo anterior en términos de tipo mime y extensiones de archivo, parece que solo los .phparchivos (legítimos o no) están configurados para que no se apliquen las reglas .htaccess o específicamente las directivas mod_headers. Pero no sé cómo probar esto y debido a que es un servidor compartido, no tengo httpd.confacceso para hurgar.

¿Alguna idea de por qué apache omitiría enviar encabezados para archivos php?

También he intentado:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>
Antonio
fuente
La actualización de PHP / CGI a PHP / FastCGI parece haberlo solucionado. Todavía estoy muy ansioso por recibir comentarios si alguien sabe cuál fue la causa raíz.
Anthony
1
Anthony, ¿usaste mod_fastcgi? Experimento exactamente el mismo comportamiento y me parece que mod_fastcgi rompe la funcionalidad mod_headers. Publiqué
Onkeltem
lo mismo aquí: / alguna noticia o solución alternativa que? No puedo imaginar que esto no sea un problema en más casos por ahí ...
Adrian Föder

Respuestas:

4

Este es el comportamiento esperado cuando se ejecutan scripts CGI. Desde la última versión (2.4) de los documentos mod_headers :

Es posible que sea necesario cambiar el valor predeterminado de onsuccess a siempre en circunstancias similares a las que se enumeran a continuación. Tenga en cuenta también que repetir esta directiva con ambas condiciones tiene sentido en algunos escenarios porque siempre no es un superconjunto de éxito con respecto a los encabezados existentes:

[...]
Está modificando o eliminando un encabezado generado por un script CGI, en cuyo caso los scripts CGI están en la tabla correspondiente a always y no en la tabla predeterminada.

El problema original (con, quizás, una mejor explicación) está en el error 49308 .

Andrew M.
fuente
Si estoy leyendo eso correctamente, el uso Header always set MyHeader "I'm Set!"debería haber resuelto el problema. Creo que encontré una respuesta donde alguien sugirió eso y tampoco funcionó para el OP en ese caso. Pero también estoy bastante seguro de que dijeron que lo intentaran Header set always, por lo que esa sugerencia falló.
Anthony
No, lo retiro. Hice Ctrl-z'd para ese intento y fue Header always set. ¿Estoy leyendo mal la cita?
Anthony
En su pregunta original no tiene eso especificado; ¿Estás seguro de que está listo? Debería ser algo así Header always set MyHeader "I'm Set!", según su ejemplo.
Andrew M.
Bueno, lo intenté, aunque sin el respaldo de Apache, por lo que podría haber renunciado a un intento. Y ahora que está funcionando, estoy atascado con solo asumir que fue el cambio de CGI a FastCGI, pero sospecho por todos lados.
Anthony