Apache mod_cache:基于cookie值的变化缓存

时间:2011-03-15 22:54:50

标签: apache caching cookies

目前,我正在使用mod_cache来缓存Web应用程序的页面详细信息。

我有基于User-Agent和Accept-Language的缓存Vary,因为这些情况有不同的有效负载。

Vary: User-Agent, Accept-Language

我们计划在每个页面上都有特定于区域的信息,但这是我们尝试确定缓存策略的地方。

我们有一个Cookie会持续显示我们为地理位置定位的区域,但很明显缓存不会因此Cookie而异。

对于某些Cookie或标题,可以根据进行更改? (注意我说某些cookie,因为我们不希望会话标识符与此冲突) - 类似于正则表达式匹配:

location=(.+?);

1 个答案:

答案 0 :(得分:1)

使用Apache可以做到这一点。它可以解析cookie值并将其传递给自定义标题,然后你需要通过这个标题来改变:

# Set languageC cookie value to environment variable "siteLanguage"
RewriteCond %{HTTP_COOKIE} ^.*lunetics_locale.*$ [NC]
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)lunetics_locale=([^;]*) [NC]
RewriteRule ^(.*)$ - [env=siteLanguage:%1]

# If no languageC cookie present. Set "siteLanguage" environment variable to "en"
RewriteCond %{HTTP_COOKIE} !^.*lunetics_locale.*$ [NC]
RewriteRule ^(.*)$ - [env=siteLanguage:en]

# Set enviroment variable "siteLanguage" value to custom header "SiteLanguage"
RequestHeader set X-Language "%{siteLanguage}e" env=siteLanguage

并将Vary X-Language添加到您的回复标头中。 我不确定这是最好的方法,我有相关的问题和问题:Is it possible to vary page caches (to have cache versions) with the same url and different cookie value (language)?