2

我正在编写一个在线网站编辑器,人们可以在其中制作页面并在他们自己的网站中编辑他们的内容。系统编写真正的 .html 页面和真正的 .css 页面。问题有两个方面:我想在他们编辑时禁用他们网站上所有内容的缓存,以便他们始终获得所有内容的最新版本,并且我不想为所有人完全禁用缓存,以便网站表现良好。我的想法是,我会寻找标识登录用户的 cookie,并在 .htaccess 中使用它来确定何时禁用缓存。我没有在 stackoverflow、askapache、Google 等中找到任何处理基于 cookie 设置特定请求标头的内容,但通过这些资源,我能够拼凑以下内容:

RewriteEngine on
RewriteCond %{HTTP_COOKIE} !^.*mode=.*$ [NC]
RewriteRule ^(.*)$ - [env=CACHECONTROL:max-age=604800]
RewriteCond %{HTTP_COOKIE} ^.*mode=.*$ [NC]
RewriteRule ^(.*)$ - [env=CACHECONTROL:no-cache]

Header set Cache-Control "%{CACHECONTROL}e" env=CACHECONTROL

这在检测到 cookie 并且请求标头正在更改的意义上确实有效,但它似乎对用户体验没有任何影响。他们在缓存方面仍然存在巨大问题,他们在缓存中对其模板进行更改、发布,然后转到页面进行编辑,仍然可以查看旧版本的模板。

如果他们在未登录的情况下访问他们的网站,并且获得了 max-age 缓存,这是否意味着在他们登录后没有检查我的 .htaccess 文件?有没有更好的变量来设置这个?我已经束手无策了,真的可以用其他一些眼球来解决这个问题。

提前致谢!麦克风

编辑这是我现在使用的:

Header set Cache-Control "must-revalidate, private"
Header set Expires "-1"

似乎“必须重新验证”比指定超时年龄更重要,而且它似乎有所帮助。我可以为所有用户使用相同的标头也很好,这意味着更少的服务器端编程和更多的静态服务文件。虽然它仍然不完美,我们仍然偶尔会收到有关缓存的抱怨。

4

0 回答 0