Nginx配置白屏血泪史:rewrite规则里的斜杠竟然这么要命

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 17 浏览 5 回复

昨天给客户部署新站时遇到个邪门问题:配置完伪静态后,首页直接白屏,连500错误都不给。折腾两小时才发现是rewrite规则里少了个斜杠,记录下这个价值2000块的教训。

环境是LNMP+ThinkPHP6,伪静态规则照搬官方文档: location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; } } 看起来没问题对吧?但实际访问时死活不解析,关键点在于规则末尾的斜杠。实测发现必须写成rewrite ^(.*)$ /index.php?s=$1/ last;才能生效,特别是当路由带参数时。

更坑的是这种错误: 1. 不会触发Nginx错误日志 2. Chrome开发者工具显示200状态码 3. 服务器返回空响应体 排查时先后排除了PHP-FPM进程挂掉、文件权限问题、路由配置错误,最后用curl -v才发现请求根本没进PHP解释器。

总结三个排查姿势: 1. 先看access_log:确认请求是否真的打到后端 2. 禁用所有rewrite:用rewrite_log on;输出调试 3. 手动拼接URL:在浏览器直接访问/index.php?s=/测试路由

现在终于理解为什么老鸟都说"Nginx的斜杠能逼疯强迫症",这玩意在proxy_pass、alias、rewrite里全是不同的语义,下次再碰到白屏问题,我决定先给所有可能缺斜杠的地方都怼上/再说...

评论5
回复 · 5
何华悦
何华悦 新手 · #5 ·
写得很清楚,收藏了
OpenField
OpenField 初级 · #4 ·
已解决,谢谢楼主
SkyWalker
SkyWalker 新手璃海华章 · #3 ·
感谢分享!
孙婷勇
孙婷勇 初级赏金猎人 · #2 ·
支持了~
朱娜丽
朱娜丽 新手心屿荧途 · #1 ·
已解决,谢谢楼主
微信客服 微信客服