2016-07-01 28 views
5

Czy można dodać nagłówki (zdefiniowane w pliku .htaccess) do odpowiedzi wygenerowanej przez PHP?Manipuluj nagłówkami odpowiedzi PHP w pliku .htaccess?

Mam następujący plik .htaccess w moim, że należy dodać nagłówek TestHeader do każdej odpowiedzi dostarczonej przez mojego Apache Webserver:

#<IfModule mod_headers.c> 
# Header unset X-Powered-By 
    Header add TestHeader "It works." 
#</IfModule> 

Mam też trzy dodatkowe pliki z tego folderu:

  1. html.html

    <html>content</html> 
    
  2. 1.php

    <?php 
    echo "<html>content php</html>"; 
    
  3. 2.php

    <?php 
    header("TestHeader: Sent from PHP."); 
    echo "<html>content php</html>"; 
    
    • Żądanie html.html zwraca nagłówek TestHeader: "It works."
    • wzywającą 1.php robi nie header powrót TestHeader
    • Żądanie 2.php powraca nagłówku TestHeader: "Sent from PHP."

Czy jest jakiś sposób można manipulować nagłówek odpowiedzi z wyjściem PHP przy użyciu .htaccess dyrektyw?

EDYCJA: PHP działa jako FastCGI na serwerze.

+0

Wiem, że to jest poza zakresem, ale czy rozwiązanie tylko PHP rozwiąże problem? Sposób na ustawienie nagłówka raz w PHP, ale dotyczy to wszystkich skryptów PHP – BeetleJuice

+0

It * should * work. Jeśli, na przykład, jeśli w '1.php' zrobisz' print_r (apache_response_headers()) 'powinieneś otrzymać tablicę z' [TestHeader] => Działa. "W nim (możesz potrzebować wywołania' flush() 'pierwszy). – CD001

+0

@ CD001: Więc mówisz, że PHP w jakiś sposób usuwa nagłówki? – Edward

Odpowiedz

2

To prawdopodobnie będzie problem z wersją Apache i faktem, że PHP działa jako FastCGI.

W Apache 2.2.X nastąpił błąd: https://bz.apache.org/bugzilla/show_bug.cgi?id=49308

znalazłem kilka innych stanowisk, które proponują użycie warunku always aby rozwiązać problem:

Header always add TestHeader "It works." 

Zobacz także:

+0

Gdy już wiesz, że musisz szukać FastCGI i nagłówków, możesz znaleźć sporo problemów :-D; Wersja na moim serwerze to w rzeczywistości "2.2.x". – Edward

3

Można użyć SetEnvIf a następnie dodać nagłówek odpowiednio:

SetEnvIf Request_URI "\.php$" phpfile 
Header set TestHeader "Sent from PHP" env=phpfile 

Jeśli URL żądania kończy się rozszerzeniem „.php”, a następnie będzie SetEnvIf ustawić zmienną «phpfile». Jeśli zmienna "plik_php" istnieje, wówczas jako nagłówek odpowiedzi zostanie wysłana TestHeader: Sent from PHP. Możesz użyć tej logiki dla tylu rozszerzeń lub wzorców adresów URL, ile potrzebujesz.

Edycja: Jeśli nagłówek już istnieje, tzn. Jest wysyłany z PHP, to przy użyciu Header Set apache zastąpi go nową wartością.

+0

Nagłówek odpowiedzi wysłany przez PHP można zastąpić przy użyciu "zestawu" w pliku .htaccess. – nidhi