Я нашел пример того, как это сделать в Интернете, но мне не удалось заставить это работать.
Хотите установить долгое время кеширования в будущем для запросов, которые имеют строка запроса вроде? v = 123. Я включил свою конфигурацию ниже. Но это просто не сработает. Что я делаю не так?
RewriteEngine on
RewriteCond %{QUERY_STRING} ^v
RewriteRule ^.*$ - [ENV=LONGCACHE:1]
Header set Cache-Control "max-age=31536000, public" env=LONGCACHE
Я пробовал кучу различных комбинаций в регулярном выражении, проверяя строку запроса, похоже, ничего не работает.
Оказывается, эта конфигурация должна находиться внутри
, что неудобно, так как я пытался загрузить с
conf.d
Не обязательно.
(Зная, что эти директивы были в конфигурации основного сервера за пределами существующего vHost, важный момент отсутствует в вашем вопросе.)
«Проблема» в том, что директивы mod_rewrite в конфигурации сервера не наследуются контейнером
по умолчанию . Директива Заголовок
(часть mod_headers) в конфигурации сервера обрабатывается , но поскольку директивы mod_rewrite не выполняются и не устанавливают переменную среды LONGCACHE
, параметр заголовок не установлен.
Если вы использовали Apache 2.4, вы можете использовать SetEnvIfExpr
(mod_setenvif) для установки переменной среды на основе наличия строки запроса и избегать использования mod_rewrite.
В Apache 2.2 вам нужно будет включить наследование mod_rewrite в контейнере
:
RewriteEngine On
RewriteOptions Inherit
Обратите внимание, однако, что директивы из конфигурации сервера наследуются после директивы в контекст виртуального хоста (NB: директивы в контейнерах
не применяются, поскольку они запускаются позже - в контексте каталога ). Это означает, что директивы в vHost потенциально могут предотвратить выполнение директив сервера. (В Apache 2.4+ у вас больше контроля над тем, как наследовать директивы.)
ИЛИ, включите эти «общие» директивы в отдельный файл конфигурации и включите
файл конфигурации в каждый виртуальный хост по мере необходимости.
Оказывается, эта конфигурация должна находиться рядом с
, что неудобно, так как я пытался загрузить из conf.d. Но, по крайней мере, если кто-то еще столкнется с этой проблемой, вам необходимо иметь это в своем VirtualHost!