Apache 2.2条件头响应

时间:2014-07-15 21:44:34

标签: apache mod-rewrite apache2 httpd.conf cache-control

我正在尝试配置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指令都没有检测到它。

有谁知道可能导致这种情况的原因或者为什么这根本不起作用?

1 个答案:

答案 0 :(得分:0)

IfDefined无效的原因你可以在这里找到:Apache IfDefine conditionals in .htaccess

基本上,IfDefined仅评估在命令行而不是中定义的变量,如果您像定义它们一样或使用SetEnv或SetEnvIf定义它们。

但据我所知 env = 应该有效。