htAccess - 有条件重写并过期



嘿!

我的 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>

最新更新