控制服务器上的自定义文件的缓存过期

时间:2014-10-24 22:09:45

标签: apache .htaccess http server

我们从服务器向我们提供的本机Windows操作系统应用程序文件。文件可以每分钟更改,因此我们需要确保用户正在下载最新文件。

我们发现便携式WiFi上的用户往往会收到较旧的文件。因此,我们正在更改某些文件的服务器.htaccess文件到期。

  • 我们提供自定义文件类型(.ebc),文件内容通过HTTP以纯文本形式发送。在这种情况下,我们应该使用ExpiresByType text/ebc "access 1 minute"吗?
  • 更改.htaccess缓存控制会影响便携式Wifi缓存,还是会影响浏览器?
  • mod_expires / mode_headers应该在重定向和重写之前发生代码吗?我之前发现你应该在其他人之前执行某些.htaccess代码操作(比如在文件顶部放置重定向)。

继承我的代码:

RedirectMatch  (?i)^/wp-content/uploads/2014/10/a.exe http://www.website.com/wp-content/uploads/2014/10/b.exe

## EXPIRES CACHING  Should we place this before mode_rewrite or after? ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/ebc "access 1 minute"
</IfModule>
## EXPIRES CACHING ##

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

2 个答案:

答案 0 :(得分:2)

这里有3个问题,所以我会尝试回答它们。

  1. 我们提供自定义文件类型(.ebc),文件内容通过HTTP以纯文本形式发送。在这种情况下,我们应该使用ExpiresByType text/ebc access 1 minute

    在您的服务器上正确设置text/ebc mime-type时,应该没问题

  2. 更改.htaccess缓存控制是否会影响便携式Wifi缓存,或者这只会影响浏览器

    我真的不知道“便携式Wifi缓存”是什么。这些标头仅针对浏览器。如果自定义应用程序正在下载这些文件,则可能正在实现自己的缓存,因此可能会忽略这些标头。

  3. 在重定向和重写之前是否应该发生mod_expires / mod_headers代码?

    我把它放在重定向之前,但仅从逻辑的角度来看。这些不像RewriteRules,并认为它们是单独评估的。

  4. 此外,我将补充说缓存很困难,一旦文件离开您的服务器,就很难强制更新。不同的浏览器表现出不同的方式,我遇到的是一个地方而不是另一个地方的配置。

    我还会考虑另外两种方法来解决你的问题。

    首先,不要缓存你的文件:

    <FilesMatch "\.ebc$">
      Header set Cache-Control no-cache
      Header set pragma no-cache
    </FilesMatch>
    

    其次考虑实现缓存破坏机制。如果文件是从某个地方链接的,请尝试确保每次文件更改时链接都已更改(通常是带有时间戳的查询字符串)。你显然需要确保包含链接的内容也没有被缓存。

答案 1 :(得分:1)

我过去使用的一个更简单的解决方案是在可下载文件中添加一个参数。

例如,如果您要提供的文件是

http://www.domain.tld/file.pdf

然后您可以创建以下链接:

http://www.domain.tld/file.pdf?d486dFyg

问号及其后的任何内容(随机)将被忽略,但它将保证用户将始终下载最新版本,因为URL将是不同的(因为当然随机总是不同)。 / p>

用户计算机上的下载文件只是file.pdf所以绝对没有缺点。

编辑:我注意到你的问题中有一些对WordPress的引用,即PHP,所以你可以使用rand()函数追加随机部分:http://php.net/manual/en/function.rand.php