12

どのパスファイルからアクセスするかに応じて、条件付きでキャッシュヘッダーを設定したいと思います。基本的に、アクセスhttp://www.example.com/cache/$cache_key/*は、はるかに将来のキャッシュヘッダーを持つファイルを提供する必要があります。

書き換えルールを使用して環境変数を設定し、その変数に基づいてキャッシュ制御ヘッダーを設定しようとしています。ただし、変数の設定がプロセスの後半か何かのようです。条件付きヘッダールールが実行されることはありません。

RewriteRule ^cache/.*?/(.*) /$1 [env=asset:true,L]
Header set Cache-control "max-age=30"
Header set Cache-Control "max-age=31536000" env=asset
Header unset ETag env=asset

これを行うためのより良い方法はありますか?DirectoryブロックとLocationブロックの組み合わせをいくつか試しましたが、成功しませんでした。

4

1 に答える 1

20

使用phpinfo()して、書き換えられたリクエストで環境変数がまったく設定されていないことを確認したので、問題はリクエストの順序ではなく、変数を破棄しているように見えることです。URLの代わりにクエリ文字列を使用し、書き換えを行わないことが、これを機能させる唯一の方法のようでした。私は同意します、それはより良い方法があるべきであるように思われます。

RewriteCond %{QUERY_STRING} longcache=true(&|$)
RewriteRule .* - [ENV=LONGCACHE:true,L]

Header set Cache-Control "max-age=30" env=!LONGCACHE
Header set Cache-Control "max-age=31536000" env=LONGCACHE

目を開けることによって得られるより異なる答え:

リダイレクト後assetに環境変数の名前が変更さREDIRECT_assetれるため、条件付きヘッダーディレクティブは次のようにする必要があります。

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset
于 2011-10-23T06:14:06.363 に答える