![根据浏览器语言提供不同的文件](https://linux22.com/image/693571/%E6%A0%B9%E6%8D%AE%E6%B5%8F%E8%A7%88%E5%99%A8%E8%AF%AD%E8%A8%80%E6%8F%90%E4%BE%9B%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6.png)
假设我有一个文件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 { }
因此正则表达式匹配将发生在所有站点,而不仅仅是当前站点。