按Content-Type设置标题

时间:2014-02-09 18:48:11

标签: apache header apache2 content-type

我以前用过这个;

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "now plus 2 weeks"
  // Lots omitted here
</IfModule>

而且这个;

<IfModule mod_headers.c>
  <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|JPG)$">
    Header set Cache-Control "max-age=1209600"
  </filesMatch>
  // Lots omitted here
</IfModule>

我可以按内容类型设置过期,我可以通过文件扩展名设置任何标题。

但这些似乎都不允许你按内容类型设置任何你想要的标题。

我想根据响应的内容类型设置缓存控制标头 - 请注意,这与文件扩展名不同。我有“友好网址”,因此filesMatch无法捕获文件扩展名,因此没有文件扩展名,但内容类型为text/html

如何为特定内容类型设置缓存控制标头?

3 个答案:

答案 0 :(得分:6)

在2.4中,您可以将expr =附加到Header指令而不是env =。

在默认(非早期)模式下,mod_headers作为输出过滤器运行 - 因此内容类型已经设置并且可由表达式解析器使用

http://httpd.apache.org/docs/2.4/expr.html

答案 1 :(得分:-1)

我想您需要先添加或设置Cache-Control标头。请尝试下面的代码片段,不要忘记“无变换”参数。

<IfModule mod_expires.c>
   ExpiresActive On
   ExpiresByType image/gif "now plus 2 weeks"
  // Lots omitted here

  //This is the magic
  <IfModule mod_headers.c>
     Header append Cache-Control "public, no-transform"
  </IfModule>

</IfModule>

答案 2 :(得分:-2)

如果要创建缓存内容类型,可以这样输入:

<IfModule mod_expires.c>

ExpiresActive on

ExpiresByType text/html "access plus 15 days"

</IfModule>