Laravel 5.8访问自定义路由tavana出现403 Forbidden错误如何解决?
问题原因分析
- 公共目录下存在同名
tavana文件夹:这是Laravel场景下该类问题的最高发原因,Web服务器默认会优先匹配实际存在的文件/目录,若tavana目录存在且未开启目录索引,会直接返回403,不会将请求转发给Laravel入口文件处理 - 权限控制中间件异常:若近期新增了权限校验、登录态校验类中间件,或原有中间件逻辑调整,该路由被纳入拦截范围就会返回403
- Web服务器配置变更:Nginx的站点配置、Apache的
.htaccess规则被修改后,可能导致前缀为tavana的请求没有被转发到Laravel的public/index.php处理 - 框架目录权限异常:Laravel运行必须的
storage、bootstrap/cache目录权限被修改,框架无法正常读写缓存、日志等文件时也可能抛出403错误 - 路由缓存未更新:生产环境开启路由缓存的情况下,修改路由后未重新生成缓存,会导致路由配置不生效,请求可能匹配到其他带权限控制的路由规则
排查修复步骤
- 优先检查项目
public目录下是否存在名为tavana的文件夹:
若文件夹无需保留,直接删除即可恢复路由正常访问;若需要保留该文件夹,修改Web服务器配置,将/tavana路径的请求优先转发给Laravel入口文件,跳过实际目录匹配逻辑 - 检查路由绑定的中间件:
执行php artisan route:list命令,查看该路由对应的中间件列表,确认是否新增了权限类拦截中间件;同时检查TavanaStaticController的构造函数,是否新增了$this->middleware()相关的权限校验逻辑 - 验证Web服务器配置:
Nginx环境检查站点配置的location规则,确保请求找不到对应文件/目录时会转发到index.php,基础参考配置如下:
Apache环境检查location / { try_files $uri $uri/ /index.php?$query_string; }public目录下的.htaccess文件是否被篡改,重定向规则是否正常 - 校验目录权限:确认
storage、bootstrap/cache目录权限为755,目录所属用户与Web服务器运行用户一致 - 重新生成路由缓存:执行
php artisan route:clear清理路由缓存,开发环境不建议开启路由缓存,生产环境修改路由后需执行php artisan route:cache重新生成缓存
内容的提问来源于stack exchange,提问作者wikadom
相关产品推荐
相关产品推荐

