1

我们有从我们的服务器提供给原生 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
4

2 回答 2

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 并且认为它们是单独评估的。

此外,我要补充一点,缓存很困难,一旦文件离开您的服务器,就很难强制更新。不同的浏览器有不同的行为方式,我遇到过在一个地方工作而不在另一个地方工作的配置。

我还会考虑您正在尝试的其他两种方法。

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

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

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

于 2014-10-29T17:33:10.433 回答
1

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

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

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

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

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

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

用户计算机上下载的文件将只是 file.pdf,因此绝对没有缺点。

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

于 2014-11-01T14:26:14.037 回答