【问题标题】:Apache 2.2 conditional headers on responseApache 2.2 响应的条件标头
【发布时间】: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


    【解决方案1】:

    IfDefined 不起作用的原因可以在这里找到:Apache IfDefine conditionals in .htaccess

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

    但据我所知 env= 应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-21
      • 2014-09-29
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2014-02-11
      • 2012-12-31
      • 2012-08-14
      相关资源
      最近更新 更多