我有一个使用Joomfish进行翻译的多语言joomla网站。由于Joomfish使用cookie来改变语言,而不是一个不同的URL,我遇到了重大问题。然而,我找到了一种方法来通过获取清漆来检查cookie值,如果英语服务缓存,如果还有其他任何传递给服务器。
多数民众赞成,但我希望能够缓存其他版本。有没有办法为不同的语言提供不同的缓存。所以是德语,法语等的缓存版本。
我尝试过使用不同的nginx配置文件并设置不同的清漆后端,但这似乎没有用。
为此我做了:
/* default is english */
backend default {
.host = "127.0.0.1";
.port = "8080";
}
/* french backend */
backend french {
.host = "127.0.0.1";
.port = "8081";
}
然后在我的sub recv
函数中:
if(req.http.cookie ~ "jfcookie\[lang\]=fr"){
set req.backend = french;
}
但它似乎服务于相同的缓存后端。因此,如果您使用法语,它会将您发送给英语内容。
答案 0 :(得分:1)
我相信你可以通过发送一个不同的标题来处理这个问题,你可以让你的应用设置一个标题,例如X-language
并发送一个标题Vary: X-language
,这样清漆会理解有两种不同的语言并分别缓存每个。
答案 1 :(得分:0)
我现在有这个工作。对于处于相同情况的任何人,请查看散列。我在下面详述了我的解决方案。
sub vcl_recv {
if(req.http.cookie ~ "jfcookie\[lang\]=fr"){
set req.http.X-Cookie-Language = "fr";
}
}
sub vcl_hash {
hash_data(req.http.X-Cookie-Language);
}