Nginx多站点配置问题:URL大小写引发404错误求助
解决Nginx子站点URL大小写敏感导致的404问题
问题根源
Nginx的普通location匹配默认区分大小写,你当前配置中仅对全小写的/bollettini/路径做了规则处理,当URL包含大写字符(如/Bollettini)时,无法匹配到对应的location块,会 fallback 到根路径的location /规则,而根路径的try_files找不到对应资源,最终返回404错误。另外原配置中第一个重定向规则的$scheme&:$host存在语法错误,正确写法应为$scheme://$host。
修复配置
替换现有配置为以下内容,实现URL大小写不敏感处理并统一规范到小写URL:
# 匹配所有大小写变体的/bollettini(含结尾带/或不带),重定向到标准小写URL location ~* ^/bollettini/?$ { return 301 $scheme://$host/bollettini; } # 匹配/bollettini/下所有子路径(不区分大小写),按子站点规则处理请求 location ~* ^/bollettini/(.*)$ { try_files $uri $uri/ /bollettini/index.php?$args; } location / { try_files $uri $uri/ /index.php?$args; #try_files $uri $uri/ /index.php?q=$request_uri; }
配置说明
location ~*表示启用不区分大小写的正则匹配,能覆盖所有大小写组合的bollettini路径;- 第一个规则负责将所有大小写变体的根路径(如
/Bollettini/、/BOllettini)重定向到标准的/bollettini,既解决访问问题,也统一URL规范利于SEO; - 第二个规则处理
bollettini下的所有子资源请求,确保子路径的大小写变体也能正常访问; - 保留原根路径规则,不影响主站点的正常运行。
内容的提问来源于stack exchange,提问作者Salvatore Mangiagli
相关产品推荐
相关产品推荐

