Serve different files depending on the browser language
Assuming I have a file en/index.html
and a file de/index.html
I'd like to serve the de/index.html
file to users who have German as their default language setup in their browser and to all others I'd like to serve the en/index.html
file.
How can I do this within the means of the normal nginx configuration?
The easiest way to do this:
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;
}
There's other way to do this but it has some drawbacks too:
map $http_accept_language $index_page {
default /index.html;
"~*^de" /index.de.html;
"~*^fr" /index.fr.html;
}
Pros: no if's (if's are evil), less code.
Cons: map can only be used inside http { }
block so regexp matching will happen for all sites, not just the current one.