Wie fügt man einen Header in .htaccess basierend auf dem Dateityp (MIME-Typ) hinzu?

Wie fügt man einen Header in .htaccess basierend auf dem Dateityp (MIME-Typ) hinzu?

Ich möchte allen Antworten vom Dateityp (MIME-Typ) Text/HTML, aber nicht anderen Dateien, zwei zusätzliche HTTP-Header hinzufügen.

Die aktuellen Header (bearbeitet):

curl -I https://www......

HTTP/1.1 200 OK
Date: Fri, 23 Feb 2018 20:43:15 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache
Vary: Content-Type,Accept-Encoding
X-Frame-Options: SAMEORIGIN
Connection: keep-alive
Content-Type: text/html; charset=UTF-8
Content-Language: de-DE

Die <If>Anweisung, die ich ausprobiert habe, funktioniert nicht (meine Idee war, nach zu suchen text/htmlund, wenn das festgelegt ist, dann auch zwei zusätzliche Header mit hinzuzufügen) Header set.

Ich habe mehrere Quellen überprüft, wiehier auf apache.org, kann aber scheinbar keine Antwort finden.

Dies ist eines der Dinge, die ich versucht habe und die mir am logischsten erscheinen. Führen Sie eine Prüfung auf einen aktuellen Header durch. Wenn das Ergebnis wahr ist, fügen Sie zusätzliche Header hinzu.

<If "%{HTTP:Content-Type} in { 'text/html' }">
Header set Header1 test
Header set Header2 test
</If>

Ich weiß jedoch nicht, ob diese ENV aus dem Anforderungs- oder Antwortheader übernommen wird.

Kennt jemand eine Möglichkeit, dies zu erreichen – indem man der Antwort einen benutzerdefinierten HTTP-Header basierend auf dem MIME-Typ hinzufügt?

Danke.

Antwort1

Sie müssen wahrscheinlich etwas anderes als den Inhaltstyp abgleichen, da dieser wahrscheinlich später festgelegt wird und daher dort nicht verfügbar ist.

Die Dokumentation unterhttps://httpd.apache.org/docs/2.4/expr.htmlerklärt Ihr Problem:

CONTENT_TYPE    The content type of the response (not available during <If >)

Ich würde versuchen, Dinge nur mit dem mod_headersModul zu erledigen. Hier sind einige Beispiele:https://httpd.apache.org/docs/2.4/mod/mod_headers.html

Ich würde also so etwas vorschlagen:

Header always set Header1 Value1 "expr=%{CONTENT_TYPE} == text/html"

Wenn dies nicht funktioniert, weil CONTENT_TYPE nicht festgelegt ist, müssen Sie eine Übereinstimmung mit der in REQUEST_URI gespeicherten Erweiterung herstellen.

Antwort2

Vielen Dank an alle, das hat bei mir tatsächlich funktioniert (durch Hinzufügen einer Bedingung am Ende des Header SetBefehls):

Header always set X-TEST VALUE-XYZ "expr=%{CONTENT_TYPE} == 'text/html; charset=UTF-8'"

Ich denke, das sollte auch ohne funktionieren always, habe das aber noch nicht ausprobiert.

verwandte Informationen