1

我正在尝试为 Rails 的自动版本化资源设置过期标头,例如 what.css?1234567890 。(我不想为未版本化的资源设置过期标头。)我可以在网上找到的唯一方法涉及两个步骤:1)重写所有以 10 位数字结尾的 url,以从 /public/add_expires_header 而不是 /public 加载,其中 add_expires_header 是指向 /public 的符号链接 2) 为 add_expires_header 中的所有文件添加到期日期。

似乎是个好主意——但乘客似乎不认识重写规则,如下面的 curl 结果所示。

(注意:很多人似乎认为他们可以使用 FilesMatch 实现我的目标,但我在其他地方读到 FilesMatch 看不到查询字符串。)

#来自标签中的sites_enabled/sitename
...
重写条件 %{QUERY_STRING} ^[0-9]{10}$
重写规则 ^(.*)$ /add_expires_header%{REQUEST_URI} [QSA]

  过期活动在
  ExpiresDefault "访问加 1 年"

...

-----
#curl 表示重写规则没有生效

manu@Blade-Server:~$ curl -I -L "http://x.com/stylesheets/style.css?1249092148"
HTTP/1.1 200 正常
日期:2009 年 8 月 11 日星期二 04:07:49 GMT
服务器:Apache/2.2.11 (Ubuntu) Phusion_Passenger/2.2.4 PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
最后修改时间:2009 年 8 月 1 日星期六 02:02:28 GMT
ETag:“455b-2fbb-4700aedc5f500”
接受范围:字节
内容长度:12219
变化:接受编码
内容类型:文本/css

manu@Blade-Server:~$ curl -I -L "http://x.com/add_expires_header/stylesheets/style.css?1249092148"
HTTP/1.1 200 正常
日期:2009 年 8 月 11 日星期二 04:07:55 GMT
服务器:Apache/2.2.11 (Ubuntu) Phusion_Passenger/2.2.4 PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
最后修改时间:2009 年 8 月 1 日星期六 02:02:28 GMT
ETag:“455b-2fbb-4700aedc5f500”
接受范围:字节
内容长度:12219
缓存控制:max-age=31536000
过期:2010 年 8 月 11 日星期三 04:07:55 GMT
变化:接受编码
内容类型:文本/css

我还尝试在 apache2.conf、httpd.conf 和 public/.htacess 中包含重写内容

4

1 回答 1

1

我更喜欢通过将它与在单独的子域上使用资产主机相结合来避免整个重写问题。这样您就可以为该子域上的所有内容设置过期标头。您可以在环境/production.rb 中的 rails 中激活它。

如果您不想使用单独的子域,我认为下面的代码应该这样做,尽管我自己没有测试过:

ExpiresActive On
  <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
    ExpiresDefault "access plus 1 year"
  </FilesMatch>
于 2009-08-23T09:16:25.600 回答