.htaccess - 多语言站点,基于 cookie 或接受语言的重定向 (RewriteRule

几周前我问了一个关于多语言网站的问题(参见 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/

相关文章:

php - 在 XML 中使用 HMAC-SHA1 生成 SignatureValue

excel - 如何使用 Excel 公式(无 VBA)在 HTTP POST 响应中检索一段数据?

.net - 高性能文件操作和 I/O 完成线程

django-sessions - 在 Django 中,如何找到当前登录用户的所有其他事件 ses

unit-testing - 安排 Jmeter 分布式测试

logging - Jmeter 虽然在本地工作,但在其他环境中不起作用

ruby-on-rails - 从mysql导入夹具数据

jpa - JPQL 中的复杂顺序

ruby-on-rails - 如何在 Rails 中访问父模型的实例变量?

ruby-on-rails - 超时::Selenium/Capybara/Cucumber 出错