假设我有一个文件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 { }
因此正则表达式匹配将发生在所有站点,而不仅仅是当前站点。