我想為文件類型(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
,還沒有嘗試過。