Nginx Docker环境下语言子目录请求静态资源如何重写URI解决404
Nginx双语路径静态资源404问题解决方案
核心问题修复
你需要补充处理语言前缀的重写规则,同时修改静态资源匹配逻辑,具体修改如下:
- 新增去掉语言前缀的命名location,替换你原来注释的
@remove-es块:
location @remove-lang-prefix { # 同时匹配/es/和/en/前缀的请求,移除前缀后重定向到根路径资源 rewrite ^/(?:es|en)/(.*)$ /$1 last; }
- 修改图片类静态资源的匹配规则:
location ~ \.(png|jpg|jpeg|svg|ico)$ { root /usr/share/nginx/nginxTestPHP/media; # 优先匹配原路径资源,不存在则走移除语言前缀的逻辑 try_files $uri @remove-lang-prefix; }
- 同步修改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
相关产品推荐
相关产品推荐

