You need to enable JavaScript to run this app. Nginx Docker环境下语言子目录请求静态资源如何重写URI解决404
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Docker环境下语言子目录请求静态资源如何重写URI解决404

Nginx双语路径静态资源404问题解决方案

核心问题修复

你需要补充处理语言前缀的重写规则,同时修改静态资源匹配逻辑,具体修改如下:

  1. 新增去掉语言前缀的命名location,替换你原来注释的@remove-es块:
location @remove-lang-prefix {
    # 同时匹配/es/和/en/前缀的请求,移除前缀后重定向到根路径资源
    rewrite ^/(?:es|en)/(.*)$ /$1 last;
}
  1. 修改图片类静态资源的匹配规则:
location ~ \.(png|jpg|jpeg|svg|ico)$ {
    root /usr/share/nginx/nginxTestPHP/media;
    # 优先匹配原路径资源,不存在则走移除语言前缀的逻辑
    try_files $uri @remove-lang-prefix;
}
  1. 同步修改CSS资源的匹配规则,避免CSS也出现同类型404问题:
location ~ \.css$ {
    root /usr/share/nginx/nginxTestPHP/CSS;
    add_header Content-Type text/css;
    try_files $uri @remove-lang-prefix;
}

注意:修改完成后先执行nginx -t检查配置语法,确认无误后执行nginx -s reload即可生效

原有配置优化建议

  • /es/和/en/两个location块的配置高度重复,建议合并为正则匹配块,减少后期维护成本:
location ~ ^/(es|en)/ {
    set $lang_index "Index.php";
    if ($1 = "es") {
        set $lang_index "Inicio.php";
    }
    try_files $uri/.php $uri.php $uri/ =404;
    fastcgi_intercept_errors on;
    fastcgi_pass app:9000;
    fastcgi_index $lang_index;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    include fastcgi_params; 
}
  • 静态资源匹配的正则建议统一添加$结尾,避免误匹配名称含后缀关键词的动态文件
  • 原有图片资源块中try_files写的$uri/、/$uri属于无效配置,静态资源不会是目录类型,冗余配置会增加不必要的匹配开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 19:27:05