多语言网站,基于cookie或接受语言的重定向(RewriteRule)

时间:2010-09-09 09:25:42

标签: .htaccess mod-rewrite

几个星期前,我问了一个关于多语言网站的问题(见Multilanguage site, subdirectories as language (RewriteRule))。

完美无缺(谢谢) 但是因为我想让我的网站更好,我开始添加更多语言,所以出现了一个新问题。 我想看看我是否可以用他们的语言将用户直接重定向到该网站,如果该语言不存在或设置了cookie我想将用户重定向到他们的最后一种语言或我的默认语言。

现在我在.htaccess

中创建了这个部分
  

RewriteCond%{QUERY_STRING} ^ $
  RewriteRule ^ /?$ en / [L,R = 301]

这会导致所有对www.xxx.com/的调用都被重定向到www.xxx.com/en/

现在第二部分,在我的PHP代码中我存储了一个cookie,这个cookie设置为www.xxx.com /

我尝试了以下内容:

  

RewriteCond%{HTTP_COOKIE} language =([^;] +)[NC]
  RewriteRule ^ /?$%1 / [L,R = 302]

但这给了我一个无限循环。

我也试过这个,所以如果我的语言是nl重定向到www.xxx.com/nl/但是这也会导致无限循环。此代码也应仅在某些情况下执行

  

RewriteCond%{HTTP:Accept-Language}(nl)[NC]
  RewriteRule ^ /?$ nl / [L,R = 302]

有人可以帮助我,这可能是在htaccess中还是我应该在PHP中创建一些逻辑?

1检查cookie是否设置了语言(我想这应该是上面提到的代码)
2a如果设置了cookie,则将用户重定向到该语言
2b如果未设置cookie,请检查http-accept语言
2b1如果该语言存在重定向到该语言
2b2如果该语言不存在,则重定向到默认的

提前致谢

1 个答案:

答案 0 :(得分:0)

Accept-Language是加权语言标识符列表。只是出现某种语言标识符并不意味着它是最受欢迎的语言。可能还有其他语言更受欢迎(更高 q 值)甚至根本不被接受(即q=0)。

因此,不仅仅寻找某种语言标识符,解析接受的语言列表,并在考虑偏好顺序的同时找到所接受语言和可用语言的最佳匹配。既然你似乎在使用PHP,那就用PHP代替mod_rewrite。