Apache HTTP 2.2: 在存在查询字符串版本时设置缓存头

分享于 

3分钟阅读

互联网

  繁體 雙語

问题:

我已经找到了如何在网络上完成这一切的例子,但是我还没有得到这一点。

希望对具有类似于v=123的查询字符串的请求设置长期缓存时间。 我已经将我的配置包括在下面。 但这是不可能的。 我做错什么了?


RewriteEngine on


RewriteCond %{QUERY_STRING} ^v


RewriteRule ^.*$ - [ENV=LONGCACHE:1]


Header set Cache-Control"max-age=31536000, public" env=LONGCACHE



我在 正规表达式 测试查询字符串上尝试了很多不同的组合,似乎没有什么能工作。


回答 1:

这个配置需要在 <VirtualHost> 之旁,因为我尝试从 conf.d. 加载,但至少有任何人遇到这个问题。


回答 2:

结果这个配置需要在 <VirtualHost> 内部,因为我尝试从 conf.d 加载是一个痛苦

未必。

( 知道这些指令在主服务器配置中,在现有的vHost之外,是你的问题中的一个重要点。)

"问题that服务器配置中的mod_rewrite指令缺省情况下不是由 <VirtualHost> 容器继承的。 服务器配置中的Header 指令( mod_headers的一部分) 被处理,但是由于mod_rewrite指令没有运行并且没有设置 LONGCACHE 环境变量,因此没有设置头。

如果在Apache上,那么可以根据查询字符串的存在来设置环境变量,并避免使用mod_rewrite语句。

在 Apache 2.2上,你需要在 <VirtualHost> 容器中启用mod_rewrite继承:


RewriteEngine On


RewriteOptions Inherit



但是,请注意,服务器配置的指令在 virtualhost context上下文( NB:: ) 中的指令被继承后被继承 在以后运行的<Directory> 容器中,指令不适用- - 在目录下的上下文中。 这意味着vHost中的指令可能会阻止服务器指令被执行。 ( 在 Apache + 上,你对指令如何继承有更多的控制。)

或者,将这些"共享"指令包含在单独的配置文件中,并根据需要在每个in中 include



str  HTTP  SET  Apache  HEAD  String  
相关文章