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

Nginx按语言代码路由不同路径时跳转后出现404问题求助

问题原因

你的Nginx配置中,location ~ ^/en 和 location ~ ^/es 使用了root指令,导致路径拼接错误。比如访问/en时,Nginx会尝试查找/var/www/html/en-US/en/index.html,但你的英文版本文件实际存放在/var/www/html/en-US/index.html,多出来的/en层级导致文件找不到,返回404。

修复方案

以下两种方案任选其一即可解决问题:

方案一:用alias替换root

alias会直接将location匹配的路径部分替换为指定目录,不会额外拼接URI,完美适配你“访问路径名≠实际目录名”的场景:

location ~ ^/en {
    alias             /var/www/html/en-US;
    index            index.html;
    # 适配Angular单页应用路由,刷新前端路由时返回对应语言的入口文件
    try_files        $uri $uri/ /en/index.html;
}

location ~ ^/es {
    alias             /var/www/html/es;
    index            index.html;
    try_files        $uri $uri/ /es/index.html;
}

方案二:优化map与重定向规则(更符合Nginx最佳实践)

原配置中的if判断可以用map的default参数替代,同时补充HTTPS的核心配置(你原配置遗漏了这部分):

map $http_accept_language $accept_language {
    default en;
    ~*^es es;
    ~*^en en;
}

server {
    server_name example.com;
    listen 443 ssl;
    # 补充你的SSL证书路径
    ssl_certificate /path/to/your/cert.crt;
    ssl_certificate_key /path/to/your/private.key;

    # 根路径重定向到浏览器偏好语言
    rewrite ^/$ /$accept_language/ permanent;

    location ~ ^/en {
        alias /var/www/html/en-US;
        index index.html;
        try_files $uri $uri/ /en/index.html;
    }

    location ~ ^/es {
        alias /var/www/html/es;
        index index.html;
        try_files $uri $uri/ /es/index.html;
    }
}
额外提示

如果你的Angular应用有自定义前端路由,必须保留try_files的最后一项(如/en/index.html),否则刷新路由页面时会再次出现404。

内容的提问来源于stack exchange,提问作者Anuj TBE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:30:56