公共托管环境部署Laravel访问报错,.htaccess配置问题如何解决?
问题根因排查&解决方案
你遇到的报错核心是Laravel的入口文件无法找到vendor/autoload.php加载文件,按以下步骤逐一排查解决:
1. 首先修正.htaccess语法错误
你当前的.htaccess存在语法问题,两个RewriteCond规则写在了同一行,Apache无法正常解析,替换为以下内容:
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com$ [NC,OR] RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteCond %{REQUEST_URI} !public/ RewriteRule (.*) /public/$1 [L]
修改后先尝试刷新页面,看是否恢复正常。
2. 确认文件结构&Composer安装路径正确
你提到将Laravel目录下的全部文件放在public_html下,正确的文件结构必须符合以下层级:
public_html/ ├── app/ ├── bootstrap/ ├── vendor/ ├── public/ │ ├── index.php │ └── 其他public目录文件 ├── .env └── 其他Laravel根目录文件
- 确认
public_html/vendor/autoload.php文件真实存在,如果不存在,需要在public_html目录下重新执行composer install,不要在public子目录执行该命令。 - 确认
vendor目录权限为755,目录内文件权限为644,确保web服务器用户有读取权限。
3. 更稳妥的替代部署方案(推荐)
通过.htaccess重定向到public目录的方案容易触发托管商的安全规则,且可能存在路径解析异常,推荐使用以下方案部署,无需修改根目录配置,同时更安全:
- 将Laravel根目录下除了
public文件夹之外的所有文件,全部放到public_html同级目录(如果托管商不允许访问上级目录,就放到public_html/laravel目录下,后续路径对应调整即可) - 将
public文件夹内的所有内容,直接移动到public_html根目录下 - 修改
public_html/index.php中的两个路径引用:
// 原代码 require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; // 如果Laravel核心文件放在上级目录,无需修改上述代码即可生效 // 如果Laravel核心文件放在public_html/laravel目录下,修改为 require __DIR__.'/laravel/vendor/autoload.php'; $app = require_once __DIR__.'/laravel/bootstrap/app.php';
- 最后设置
storage和bootstrap/cache目录权限为775,确保web服务器有写入权限,避免后续出现缓存、日志写入报错。
4. 额外注意事项
确认你使用的Laravel版本和托管站点的PHP版本兼容:报错信息显示当前PHP版本为7.4,仅支持Laravel 8及更低版本,如果你的Laravel版本≥9,需要升级PHP版本到8.0以上。
内容的提问来源于stack exchange,提问作者Erick Nyoto
相关产品推荐
相关产品推荐

