几个星期前,我问了一个关于多语言网站的问题(见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如果该语言不存在,则重定向到默认的
提前致谢
答案 0 :(得分:0)
Accept-Language是加权语言标识符列表。只是出现某种语言标识符并不意味着它是最受欢迎的语言。可能还有其他语言更受欢迎(更高 q 值)甚至根本不被接受(即q=0
)。
因此,不仅仅寻找某种语言标识符,解析接受的语言列表,并在考虑偏好顺序的同时找到所接受语言和可用语言的最佳匹配。既然你似乎在使用PHP,那就用PHP代替mod_rewrite。