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>

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 .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.