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

Apache 控制服务器上自定义文件的缓存过期,apache,.htaccess,http,server,Apache,.htaccess,Http,Server,我们有从服务器提供给本机Windows OS应用程序的文件。这些文件每分钟都可能更改,因此我们需要确保用户正在下载最新的文件 我们发现,使用便携式WiFi的用户往往会收到较旧的文件。因此,我们正在更改某些文件的服务器.htaccess文件过期时间 我们提供自定义文件类型(.ebc),文件内容通过HTTP以纯文本形式发送。在这种情况下,我们应该使用ExpiresByType text/ebc“访问1分钟” 更改.htaccess缓存控制会影响便携式Wifi缓存还是只影响浏览器 mod_expir

我们有从服务器提供给本机Windows OS应用程序的文件。这些文件每分钟都可能更改,因此我们需要确保用户正在下载最新的文件

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

  • 我们提供自定义文件类型(.ebc),文件内容通过HTTP以纯文本形式发送。在这种情况下,我们应该使用
    ExpiresByType text/ebc“访问1分钟”
  • 更改.htaccess缓存控制会影响便携式Wifi缓存还是只影响浏览器
  • mod_expires/mode_头是否应该出现在重定向和重写之前?我以前发现,您应该先执行某些.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
RedirectMatch(?i)^/wp content/uploads/2014/10/a.exehttp://www.website.com/wp-content/uploads/2014/10/b.exe
##过期缓存我们应该将其放置在模式_重写之前还是之后##
过期于
ExpiresByType文本/ebc“访问1分钟”
##过期缓存##
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

这里有3个问题,我将尝试回答它们

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

    只要服务器上正确设置了
    text/ebc
    mime类型,就可以了

  • 更改.htaccess缓存控制会影响便携式Wifi缓存还是只影响浏览器

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

  • mod_expires/mod_headers代码是否应该在重定向和重写之前出现

    我会把它放在重定向之前,但只是从逻辑的角度来看。这些与重写规则不同,认为它们是单独评估的

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

    我还将考虑另外两种方法。 首先,根本不缓存文件:

    <FilesMatch "\.ebc$">
      Header set Cache-Control no-cache
      Header set pragma no-cache
    </FilesMatch>
    
    
    标头集缓存控制无缓存
    标题集pragma无缓存
    

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

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

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

    http://www.domain.tld/file.pdf
    
    然后可以创建以下链接:

    http://www.domain.tld/file.pdf?d486dFyg
    
    问号和其后的任何内容(随机)将被忽略,但它将保证用户将始终下载最新版本,因为URL将不同(因为随机总是不同的)

    用户计算机上的下载文件将仅为file.pdf,因此绝对没有任何负面影响

    编辑:我注意到您的问题中提到了WordPress,即PHP,因此您可以使用rand()函数附加随机部分: