.htaccess基于cookie的动态无缓存

时间:2012-07-14 20:44:42

标签: .htaccess cookies cache-control

我正在编写一个在线网站编辑器,人们可以在自己的网站上制作页面并编辑其内容。系统会写入真正的.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"

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

0 个答案:

没有答案