Laravel 8项目部署至主机出现403 Access Forbidden错误如何解决
Laravel 8 部署后访问报403 Access Forbidden 排查修复方案
按以下优先级逐一排查,绝大多数共享主机部署的403问题都能定位解决:
- 第一优先级:检查站点根目录指向是否正确
Laravel 8的唯一入口是public/index.php,站点的根目录必须直接指向项目内的public文件夹,不能指向项目根目录。共享主机默认根目录一般是wwwroot/public_html,正确做法是把项目内public目录下的所有文件移动到站点根目录,同时把项目其他文件放到根目录同级的非web可访问目录,再修改根目录下index.php里的项目路径引用即可。
如果无法调整目录结构,也可以在项目根目录新建.htaccess文件(Apache环境)添加重写规则,把所有请求转发到public目录,规则如下:
Nginx环境需要在站点配置里把root字段直接设为项目的public目录路径,重载Nginx配置即可。<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule> - 第二优先级:检查文件和目录权限
Web服务运行用户需要有项目文件的读取权限,以及storage、bootstrap/cache目录的读写权限,权限配置错误会被服务器直接拒绝访问返回403。
标准权限配置参考:所有单文件权限设为644,所有目录权限设为755,storage和bootstrap/cache目录权限设为775即可,不要把整个项目权限设为777,大部分共享主机会拦截全权限目录直接返回403。SSH环境可执行以下命令批量修正:# 修正所有文件权限为644 find /你的项目实际路径 -type f -exec chmod 644 {} \; # 修正所有目录权限为755 find /你的项目实际路径 -type d -exec chmod 755 {} \; # 给缓存、存储目录开放读写权限 chmod -R 775 /你的项目实际路径/storage chmod -R 775 /你的项目实际路径/bootstrap/cache - 第三优先级:检查核心文件是否漏传
大部分FTP工具默认会隐藏以.开头的文件,上传时很容易漏传public/.htaccess、项目根目录的.env文件。public/.htaccess缺失会导致Apache无法识别路由规则、无法找到入口文件,直接返回403,漏传的话直接从Laravel 8官方源码包中复制对应文件到对应位置即可。
同时确认public/index.php文件存在,文件名大小写和服务器规则匹配,部分主机开启严格大小写校验,文件名大小写错误也会触发403。 - 第四优先级:检查目录索引配置
确认站点配置中已经把index.php设为默认索引文件,Apache环境可以在public/.htaccess中添加如下配置:
配置后服务器收到目录访问请求时会自动加载index.php,不会因为找不到默认索引文件返回403。DirectoryIndex index.php - 第五优先级:检查主机安全拦截规则
如果以上配置都正确还是报403,到主机面板查看站点错误日志和WAF拦截记录,部分共享主机的安全规则会拦截特定PHP函数、或者禁止非根目录下的入口文件执行,根据日志提示调整对应规则即可。
共享主机部署Laravel出现403的场景中,90%以上的问题都是根目录没有指向public目录导致的,优先排查这一项。
内容的提问来源于stack exchange,提问作者Ahmad Almabhoh
相关产品推荐
相关产品推荐

