如何根據檔案類型(mime 類型)在 .htaccess 中新增標頭?

如何根據檔案類型(mime 類型)在 .htaccess 中新增標頭?

我想為文件類型(mime 類型)text/html 的所有回應添加兩個額外的 HTTP 標頭,但不向其他文件添加兩個額外的 HTTP 標頭。

目前標題(已編輯):

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

我嘗試的語句<If>不起作用(我的想法是檢查text/html,如果設定了,則還添加兩個額外的標頭Header set

我檢查了多個來源,例如在 apache.org 上,但似乎找不到答案。

這是我嘗試過的對我來說最合乎邏輯的事情之一。檢查當前標頭;如果結果為真,則新增額外的標頭。

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

但我不知道這個 ENV 是從請求還是回應標頭中取得的。

有誰知道實現此目的的方法 - 根據 mime 類型在回應中添加自訂 HTTP 標頭?

謝謝。

答案1

您可能需要匹配內容類型以外的其他內容,因為它可能是稍後設定的,因此在那裡不可用。

文件位於https://httpd.apache.org/docs/2.4/expr.html解釋你的問題:

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

我會嘗試只用模組來做事mod_headers。看這裡的例子:https://httpd.apache.org/docs/2.4/mod/mod_headers.html

所以我建議類似:

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

如果由於未設定 CONTENT_TYPE 而不起作用,您將需要像 REQUEST_URI 中儲存的副檔名一樣進行比對。

答案2

謝謝大家,這確實對我有用(在命令末尾添加條件Header Set):

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

我認為這應該在沒有 的情況下也能工作always,還沒有嘗試過。

相關內容