为除特定文件之外的所有文件添加过期标题

时间:2018-07-08 19:50:08

标签: .htaccess caching expires-header

我正在尝试将过期标头添加到除某些特定文件之外的所有文件。实际上,我使用的是缓存工具,该工具将以下代码添加到htaccess中:

# BEGIN LBCWpFastestCache
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$">
<IfModule mod_expires.c>
AddType application/font-woff2 .woff2
ExpiresActive On
ExpiresDefault A0
ExpiresByType image/webp A2592000
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/ico A2592000
ExpiresByType image/svg+xml A2592000
ExpiresByType text/css A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/javascript A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType application/font-woff2 A2592000
</IfModule>
<IfModule mod_headers.c>
Header set Expires "max-age=2592000, public"
Header unset ETag
Header set Connection keep-alive
FileETag None
</IfModule>
</FilesMatch>
# END LBCWpFastestCache

我想对页面上的两个不同图像进行例外处理。让他们的名字分别是文件a和文件b,这是我尝试过的:

我将此代码放在插件的代码之后。

<FilesMatch "\.(file-a|file-b)$">
ExpiresDefault "access plus 1 hour"
</FilesMatch>

因为这行不通,所以我也尝试将其放在代码前,这也不行。

然后,我尝试处理插件添加的代码的FilesMatch部分,以便它排除我的文件。

<FilesMatch "(?!.*/(file-a|file-b))(\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$)">

也不起作用。

我该如何实现?

2 个答案:

答案 0 :(得分:0)

断言禁止的文件名是不够的,因为以下捕获组可能与允许的文件扩展名匹配。您应该可以使用tempered greedy token来解决它:

^((?!\/file-a|file-b).)*(\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$)

Demo

答案 1 :(得分:0)

您可以在正则表达式搜索后使用负向查找。
看看这个regex101 playground

<FilesMatch "(?<!file-a|file-b)(\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$)">