Apacheリダイレクトとキャッシュヘッダーの設定?


10

Apacheでリダイレクトを行うのは簡単です(mod_alias):

RedirectMatch ^.*$ http://portal.example.com/

キャッシュヘッダーの設定も同様に簡単です。

Header set Cache-Control max-age=0
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

(私はこれをキャッシュしたくない)

だが!2つを組み合わせることができないようです。この構成では、リダイレクトは送信されますが、ヘッダーは送信されません。

<VirtualHost *:80>
        ServerName __default__
        Header set Cache-Control max-age=0
        Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
        RedirectMatch ^.*$ http://portal.example.com/
</VirtualHost>

実際に起こることの例:

jb@apto % telnet 192.168.0.1 80
Trying 192.168.0.1...
Connected to redirector.example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: foo

HTTP/1.1 302 Found
Date: Sat, 21 Aug 2010 09:36:38 GMT
Server: Apache/2.2.9 (Debian) Phusion_Passenger/2.2.9
Location: http://portal.example.com/
Vary: Accept-Encoding
Content-Length: 316
Content-Type: text/html; charset=iso-8859-1

(etc)

リダイレクトを返す方法のための任意のアイデアキャッシュ・ヘッダー?

回答:


10

ヘッダーディレクティブに「常に」条件を追加してみてください。そうすると、次のようになります。

Header always set Cache-Control max-age=0
Header always set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

これは、「常に」条件なしで機能するはずです。デフォルトでは、任意の2xx応答コードとして定義される「成功」に設定されていると思います。


!!! どうやってこれを逃したかわからないけど、そうだ!
Jakob Borg

はい、これで終わりです。すごい。
Cosimo 2013年

これはカスタムヘッダーでは機能しないようです。奇妙です
juan

0

PerlまたはPHPで中間者スクリプトを実装する必要があります(私はPHPを使用しますが、既にロードされている場合はより簡単です)。書き換えガイドを確認し、「拡張リダイレクト」を検索してください。

http://httpd.apache.org/docs/2.2/misc/rewriteguide.html

xredirectを設定してから、必要なヘッダーをプッシュするようにスクリプトを設定します...それはきれいではありませんが、私が知る限り、それを行う唯一の方法です。


確かにそれほどではありませんが、これが(構成で直接)より良い方法で実行できないことにかなり驚いていますが、これは正解のように見えます。:(
ヤコブ・ボルグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.