子目录的Apache配置覆盖

时间:2013-09-30 05:24:25

标签: regex apache caching

我想更改子文件夹的缓存属性,但它似乎没有按预期工作。而不是缓存foo / images和foo / icons中的文件,而是返回no-cache set。

# enable caching for static files
<Directory ~ "^/web/foo/(images|icons)">
    ExpiresActive On
    # cache images and media for 7 days
    ExpiresDefault A604800
    Header append Cache-Control "public, proxy-revalidate"
</Directory>

<Directory ~ "^/web/(foo|bar)">
    ExpiresActive On
    ExpiresDefault A0
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</Directory>

我基本上希望一切都不缓存,除非它们在某些子文件夹中。我的理解是,带有正则表达式匹配的目录将按列出的顺序匹配。

请记住,我的真实网站比这个虚假的例子复杂得多。所以,是的,我知道我可以将默认值设置为不缓存,然后按目录设置它,但我实际上无法在此配置上执行此操作,因此我希望仅使用Directory指令执行此操作,也不使用.htaccess文件。< / p>

1 个答案:

答案 0 :(得分:1)

我认为您的问题是两个<Directory ~ "..">设置都有效。这将使不太具体的一个(^/web/(foo|bar))覆盖您在imagesicons目录中所做的更改。您可以尝试从父Directory中排除这些目录。

<Directory ~ "^/web/(foo|bar)(?!(/icons|/images))">
    ExpiresActive On
    ExpiresDefault A0
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</Directory>

希望它可以帮助你前进。