You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx为捷克语用户配置不同首页失败求助

Nginx根据浏览器语言加载对应首页问题解决

需要为捷克语访客展示专属首页index-cs.html,参考相关配置并查阅手册后,配置始终返回默认index.html,未达到预期效果。当前环境为Debian系统,使用nginx-full版本。

现有配置代码

map $http_accept_language $lang {
  default en;
  ~*cs.* cs;
  ~*cs-CZ.* cs;
  ~*^cs cs;
}

server {
  listen 80;
  server_name lelisoft.com www.lelisoft.com;
  root /var/www/lelisoft.com;
  index index.html;    
  location / {
    try_files $uri $uri/ /index-$lang.html /index.html;
  }
}

测试命令及结果

curl -v -H "Accept-Language: cs" http://www.lelisoft.com 
*   Trying 162.55.54.132:80...
* Connected to www.lelisoft.com (162.55.54.132) port 80 (#0)
> GET / HTTP/1.1
> Host: www.lelisoft.com
> User-Agent: curl/8.0.1
> Accept: */*
> Accept-Language: cs
< Content-Length: 473
< Last-Modified: Sun, 25 Jun 2023 09:03:01 GMT
<
<!DOCTYPE html>
<html lang='eng'>
<head>

问题排查与解决方案

问题根源在于index指令优先级高于try_files:当访问根路径/时,Nginx会优先执行index index.html直接返回默认首页,不会触发try_files里的/index-$lang.html规则。

修改步骤

  1. 调整index指令优先级
    将带语言标识的首页放在index指令首位,让Nginx优先尝试加载对应语言的首页:
map $http_accept_language $lang {
  default en;
  ~*cs.* cs;
  ~*cs-CZ.* cs;
  ~*^cs cs;
}

server {
  listen 80;
  server_name lelisoft.com www.lelisoft.com;
  root /var/www/lelisoft.com;
  # 优先匹配对应语言首页,不存在则回退到默认index.html
  index index-$lang.html index.html;    
  location / {
    try_files $uri $uri/ =404;
  }
}
  1. 简化map规则(可选)
    合并重复的正则匹配模式,让配置更简洁:
map $http_accept_language $lang {
  default en;
  ~*cs(-CZ)? cs;
}

该正则会匹配任意包含cs或cs-CZ的语言头,效果与原规则一致。

  1. 重新加载Nginx配置
sudo nginx -s reload

修改后再次用curl测试,即可返回index-cs.html内容。

内容的提问来源于stack exchange,提问作者Leos Literak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:03:33