Условно задание заголовков кеша в 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 без успеха.

Ответ 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