我正在尝试配置apache以在响应时发送expires和cache-control标头,但前提是我在请求中收到一些特定的查询字符串。
为此,我尝试按如下方式配置服务器:
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指令都没有检测到它。
有谁知道可能导致这种情况的原因或者为什么这根本不起作用?
答案 0 :(得分:0)
IfDefined无效的原因你可以在这里找到:Apache IfDefine conditionals in .htaccess
基本上,IfDefined仅评估在命令行而不是中定义的变量,如果您像定义它们一样或使用SetEnv或SetEnvIf定义它们。
但据我所知 env = 应该有效。