【发布时间】:2014-09-06 06:28:56
【问题描述】:
我正在尝试将 apache 配置为在响应时发送过期和缓存控制标头,但前提是我在请求中收到一些特定的查询字符串。
为此,我尝试如下配置服务器:
RewriteCond %{QUERY_STRING} ^.*{whateverIWantInMyQueryString}.*$
RewriteRule ^(.*)$ - [env=CACHE_HEADERS:1]
<FilesMatch "\.(js|css|png|gif|GIF)$">
<IfDefine CACHE_HEADERS>
ExpiresActive On
ExpiresDefault "access plus 12 hours"
Header append Cache-Control "public"
</IfDefine>
</FilesMatch>
但这似乎不起作用。
如果我更改配置如下:
....
<IfDefine !CACHE_HEADERS>
....
它确实有效,因此 IfDefine 似乎无法检查是否设置了 CACHE_HEADERS 环境变量。
我还尝试使用 Header 指令和基于相同环境变量的条件来配置内容,如下所示:
RewriteCond %{QUERY_STRING} ^.*{whateverIWantInMyQueryString}.*$
RewriteRule ^(.*)$ - [env=CACHE_HEADERS:1]
<FilesMatch "\.(js|css|png|gif|GIF)$">
Header always set Cache-Control "max-age=3600, public" env=CACHE_HEADERS
Header always set Expires "Thu, 01 Jan 2015 00:00:00 GMT" env=CACHE_HEADERS
</FilesMatch>
.....
但这也不起作用。所以我假设这可能是因为 mod_rewrite 设置的环境变量,由于某种原因,IfDefine 指令和 Header 指令都没有检测到。
有谁知道这可能是什么原因或为什么这根本不起作用?
【问题讨论】:
标签: apache mod-rewrite apache2 httpd.conf cache-control