Apache:只有在尚未设置的情况下才能设置全局标题

我在这里有一个令人讨厌的情况。

我有一个由pleskpipe理的服务器。 在/etc/apache2/apache2.conf mod_headers和基于mod_expires的configuration发生。 例如:

<filesMatch "\.(jpg|jpeg|png|gif|swf)$"> Header set Cache-Control "max-age=604800, public" </filesMatch> 

这工作得很好。

我的一些应用程序有问题。 我想要应用程序保持对caching的控制,如果它想。 目前这是不可能的,因为标题设置是在将响应返回给客户端之前发生的,这意味着在应用程序已经完成所有动作之后。 应用程序设置的标题将被覆盖。

 Header merge Cache-Controll... 

虽然没有工作,因为它只是追加给定的标题string。 我怀疑浏览器会像这样处理头像我希望他们:

 Cache-Control max-age=0, no-cache, no-store, must-revalidate, max-age=604800, public 

我现在的问题是:只有在特定标题“字段”中绝对没有内容的情况下才有可能设置标题? 我不希望我的应用程序设置任何环境variables,因为应用程序不应该被改变,以适应一个服务器的需要。

我也试过 – 仅用于testing目的 – 通过vhost.conf为特定域取消设置标题。 但是它会在apache2.conf头部设置之前执行,这意味着它们也会被覆盖。

我想你可以使用Header editclosures此function。 秘密的调查是一个否定的预测主张:

 Header edit Cache-control "^(?!.*max-age.*)(.*)" "max-age=604800,\1" 

这个想法是,如果stringmax-age不存在于头部的任何地方,那么^(?!.*max-age.*)(.*)匹配头部值的开始。 如果匹配成功(意思是“max-age”还不存在),则插入“max-age = 604800”,接着是原始标题的其余部分。

编辑: Apache使用PCRE,所以你可能需要使用$1而不是\1在replacestring。

Apache 2.4.7:

 Header setifempty Access-Control-Allow-Origin "*" 

下面的Apache 2.2.4

 Header append Access-Control-Allow-Origin "" Header edit Access-Control-Allow-Origin "^$" "*"