Условная установка заголовков кеша в apache - PullRequest
12 голосов
/ 18 октября 2011

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

20 голосов
/ 23 октября 2011

Использование 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 должна быть:

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset
...