Laravel站点仅/blog路由返回Nginx 403错误其余路由正常如何排查
排查解决步骤
1. 优先排查public目录下的同名静态资源
这是该场景下最高发的原因:Nginx默认会优先匹配服务器上实际存在的文件/目录,请求根本不会转发到Laravel路由处理。
- 登录服务器进入站点根目录,执行命令
ls -la public/检查是否存在名为blog的文件或目录 - 如果存在同名资源,直接删除或重命名即可解决;若需要保留该目录,参考下一步修改Nginx配置
2. 校验Nginx配置规则
Forge生成的默认配置一般不会有问题,但特殊场景下可能存在规则优先级问题:
- 在Forge站点管理页找到「Nginx配置」入口,检查是否存在针对
/blog路径的自定义location规则,这类规则会优先于Laravel的全局路由转发规则 - 确认Laravel默认的try_files规则,默认规则为:
其中try_files $uri $uri/ /index.php?$query_string;$uri/会匹配真实存在的目录,如果你需要保留public/blog目录,可将规则修改为:try_files $uri /index.php?$query_string; - 配置修改后执行
sudo nginx -s reload重载配置生效
3. 查看Nginx错误日志定位根因
如果上述两步未解决,直接查错误日志确认具体原因:
- 可直接在Forge站点管理页的「日志」标签查看Nginx错误日志,或登录服务器查看日志文件
/var/log/nginx/{你的站点域名}-error.log - 日志会明确标注403错误是因为目录权限不足、索引被禁止还是规则匹配问题,可针对性处理
4. 排查Laravel应用层面逻辑
如果日志显示请求已经转发到Laravel处理,则排查应用侧逻辑:
- 检查
BlogController的index方法是否有权限校验逻辑,存在abort(403)的返回分支 - 检查
/blog路由是否绑定了权限校验类中间件,未登录或无权限用户访问会返回403
5. 校验Envoyer部署逻辑
检查Envoyer的部署钩子脚本,是否存在自动生成静态资源到public/blog路径的逻辑,导致部署后生成同名目录覆盖路由。
内容的提问来源于stack exchange,提问作者eskimo
相关产品推荐
相关产品推荐

