嘿!
我的 Apache 2.x 服务器 webroot 中有一个文件夹/static
。如果请求匹配
/static/<somename like [S-_]+>.(png|jpg|css|js)/d{8,15}
例如
/static/bg.jpg/1335455634
我想要两样东西:
- URL 应重写为
/static/bg.jpg
(去掉时间戳) - 它将变为永不过期('到期 2030,max-age=290304000,公共缓存,...
如果请求不匹配,则请求及其标头应正常,不重写。理想情况下,/static/* 之外的任何请求都不应受到影响(尽管"巧合尾随时间限制"应该很少见......
我对FilesMatch/RewriteCond只有麻烦,所以我宁愿不发布我糟糕的尝试......(在我的机器上启用了 genereal 重写,我确实拥有发送与缓存相关的标头的权限)
丹克舍恩!
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^static/([^.]+.(png|jpe?g|css|js))/d{8,15}$ static/$1 [L,R,NC]
# now set expire date to today + 1 year
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 1 years"
ExpiresByType image/png "access plus 1 years"
ExpiresByType text/css "access plus 1 years"
ExpiresByType text/js "access plus 1 years"
ExpiresByType text/javascript "access plus 1 years"
ExpiresByType application/javascript "access plus 1 years"
ExpiresByType application/x-javascript "access plus 1 years"
</IfModule>
我选择了永不过期的iccess plus 1 years
,因为我在网上找到了这个:
"要将响应标记为"永不过期",源服务器会发送到期日期从响应之日起大约一年HTTP/1.1 服务器不应发送多个过期日期未来一年。
来自 HTTP 1.1 RFC
这样的事情怎么样?
RewriteEngine on
RewriteRule ^static/([^/]+.(png|jpg|css|js))x?/d{8,15}$ /static/$1 [NC,L]
<FilesMatch ".(png|jpg|css|js)$">
<IfModule mod_expires.c>
ExpiresActive On
</IfModule>
<IfModule mod_headers.c>
ExpiresDefault "access plus 10 years"
</IfModule>
</FilesMatch>