Условная установка заголовков кеша в apache

Я хочу условно установить заголовки кеша в зависимости от того, по какому пути осуществляется доступ к файлам. По сути, доступ к 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.


person mike    schedule 18.10.2011    source источник


Ответы (1)


Используя 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
person Kevin Stricker    schedule 23.10.2011
comment
Спасибо, как-то я пропустил, что на это ответили. - person mike; 31.10.2011