几周前我问了一个关于多语言网站的问题(参见 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 如果该语言不存在,则重定向到默认语言
提前致谢
最佳答案
Accept-Language是加权语言标识符的列表。仅仅出现某种语言标识符并不意味着它是最受欢迎的语言。可能还有其他更受欢迎的语言(更高的 q 值)甚至根本不被接受(即 q=0
)。
因此,与其仅仅寻找某种语言标识符,还不如解析接受语言列表,并在考虑偏好顺序的同时找到接受语言和可用语言的最佳匹配。由于您似乎在使用 PHP,因此请使用 PHP 而不是 mod_rewrite。
关于.htaccess - 多语言站点,基于 cookie 或接受语言的重定向 (RewriteRule),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3675323/