我想向所有文件类型(mime 类型)为 text/html 但不为其他文件的响应添加两个额外的 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
,但还没有尝试过。