ファイルタイプ (MIME タイプ) が text/html であるすべての応答に 2 つの 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
、それが設定されている場合は、 を含む 2 つの追加ヘッダーも追加します) Header set
。
私は複数の情報源を確認しましたapache.orgはこちら、しかし答えが見つからないようです。
これは私が試したことの中で最も論理的と思われることの 1 つです。現在のヘッダーをチェックし、結果が true の場合は追加のヘッダーを追加します。
<If "%{HTTP:Content-Type} in { 'text/html' }">
Header set Header1 test
Header set Header2 test
</If>
しかし、この ENV がリクエスト ヘッダーから取得されたものなのか、応答ヘッダーから取得されたものなのかはわかりません。
これを実現する方法、つまり MIME タイプに基づいて応答にカスタム HTTP ヘッダーを追加する方法を誰か知っていますか?
ありがとう。
答え1
コンテンツ タイプは後で設定され、そこでは利用できない可能性があるため、コンテンツ タイプ以外の何かに一致させる必要がある可能性があります。
ドキュメント詳しくはこちらあなたの問題を説明します:
CONTENT_TYPE The content type of the response (not available during <If >)
モジュールだけでやってみますmod_headers
。ここで例を見てください:詳しくは、http://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
、まだ試していません。