Apache HTTP 2.2: Установка заголовка кеша при наличии версии строки запроса

Я нашел пример того, как это сделать в Интернете, но мне не удалось заставить это работать.

Хотите установить долгое время кеширования в будущем для запросов, которые имеют строка запроса вроде? v = 123. Я включил свою конфигурацию ниже. Но это просто не сработает. Что я делаю не так?

RewriteEngine on
RewriteCond %{QUERY_STRING} ^v
RewriteRule ^.*$ - [ENV=LONGCACHE:1]
Header set Cache-Control "max-age=31536000, public" env=LONGCACHE

Я пробовал кучу различных комбинаций в регулярном выражении, проверяя строку запроса, похоже, ничего не работает.

2
задан 16 February 2019 в 03:28
2 ответа

Оказывается, эта конфигурация должна находиться внутри , что неудобно, так как я пытался загрузить с 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+ у вас больше контроля над тем, как наследовать директивы.)

ИЛИ, включите эти «общие» директивы в отдельный файл конфигурации и включите файл конфигурации в каждый виртуальный хост по мере необходимости.

1
ответ дан 3 December 2019 в 11:23

Оказывается, эта конфигурация должна находиться рядом с , что неудобно, так как я пытался загрузить из conf.d. Но, по крайней мере, если кто-то еще столкнется с этой проблемой, вам необходимо иметь это в своем VirtualHost!

1
ответ дан 3 December 2019 в 11:23

Теги

Похожие вопросы