根据浏览器语言提供不同的文件

根据浏览器语言提供不同的文件

假设我有一个文件en/index.html和一个文件,de/index.html我想将该de/index.html文件提供给在浏览器中将德语设置为默认语言的用户,并向所有其他用户提供该en/index.html文件。

我怎样才能通过正常的 nginx 配置做到这一点?

答案1

最简单的方法是:

set $first_language $http_accept_language;
if ($http_accept_language ~* '^(.+?),') {
  set $first_language $1;
}

set $language_suffix 'en';
if ($first_language ~* 'de') {
  set $language_suffix 'de';
}

location / {
  try_files $uri/$language_suffix/index.html $uri $uri.html;
}

答案2

还有其他方法可以做到这一点,但它也有一些缺点:

map $http_accept_language $index_page {
    default /index.html;

    "~*^de" /index.de.html;
    "~*^fr" /index.fr.html;
}

优点:没有如果(如果是邪恶的),代码更少。

缺点:map 只能在块内使用,http { }因此正则表达式匹配将发生在所有站点,而不仅仅是当前站点。

相关内容