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