在 apache2 中设置正确的过期标头

在 apache2 中设置正确的过期标头

我在 Ubuntu 上运行 apache2。我想像这样设置过期标头。

ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
  ExpiresDefault "access plus 1 year"
</FilesMatch>

我知道它会将像 www.example.com/images/a.gif 这样的 URL 缓存一年。

我的问题是这样的 URL 怎么办。www.example.com/javascripts/all.js?123456。假设上述 URL 已被缓存。现在,如果我将 URL 更改为 www.example.com/javascripts/all.js?abcdef,浏览器会请求新的 js 文件吗?

基本上,我试图查找浏览器在缓存时是否考虑完整的 URL,包括问号后的数据。

我当前的 vhost 配置如下

<VirtualHost xx.xx.xx.xx:80>
  ServerName xxxx
  ServerAlias xxxxx
  DocumentRoot /home/xxx/current/public
  <Directory "/home/xxxx/current/public">
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
  </Directory>
  <Location />
    # Insert filter
    SetOutputFilter DEFLATE

    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html

    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip

    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    # Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary

  </Location> 
</VirtualHost>

我假设我可以在标签开始之前放置 ExpiresActive On 和其他语句。

答案1

没关系。根据您的配置,all.js?123456 将请求 all.js 的新版本。您也可以将 ExpiresActiveOn 放在虚拟主机或目录中。

相关内容