5

嘿!

我的 Apache 2.x 服务器 webroot 中有一个文件夹/static。如果请求匹配

/static/<somename like [\S-_]+>.(png|jpg|css|js)/\d{8,15}

例如

/static/bg.jpg/1335455634

我想要两件事:

  • url 应重写为/static/bg.jpg(去掉时间戳)
  • 它应该成为永不过期的('expires 2030, max-age=290304000, public cache, ...)

如果请求不匹配,则请求及其标头应正常,无需重写。理想情况下,/static/* 之外的任何请求都不应受到影响(尽管«巧合的尾随时间戳»应该很少见......)

我在使用 FilesMatch / RewriteCond 时遇到了麻烦,所以我宁愿不发布我糟糕的尝试……(在我的机器上启用了通用重写,我确实有权发送与缓存相关的标头)

丹克申!

4

2 回答 2

4
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

于 2012-05-04T20:08:53.330 回答
2

这样的事情怎么样?

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>
于 2012-05-02T17:16:56.600 回答