Yii2.0.55部署需严格满足三要素:站点根目录必须为/web子目录,runtime和assets目录须www用户可写(chmod 755、chown www:www),Nginx伪静态规则须用Laravel5模板或标准try_files配置;同时cookieValidationKey不能为空,PHP版本推荐7.4+,并安装fxp/composer-asset-plugin 1.4.x。

新手第一次部署Yii2.0.55项目时,常因忽略框架对运行环境的硬性要求,导致500错误、空白页、类找不到或迁移失败——这些问题90%以上都源于安装路径、目录权限或入口配置这三处细节偏差。
站点根目录必须指向/web子目录
在宝塔面板添加站点时,根目录填 【/www/wwwroot/your-site/web】,不是项目总目录。Yii2.0.55要求Web服务器仅暴露web/下的文件,否则runtime/、config/等敏感路径可能被直接访问,且index.php加载时会因相对路径错误而报require失败。
确认web/index.php存在且可读,PHP版本选7.4或8.0+(Yii2.0.55官方最低要求PHP 7.2,但实际运行中PHP 7.3以下会出现autoload兼容问题)。
如果已建站但报500,去宝塔日志里搜“Failed opening required”,大概率是根目录设高了一级,导致加载了项目根目录下的requirements.php而非web/下的入口逻辑。
runtime和assets目录必须可写
执行 php yii migrate 或首次访问页面时,若提示“Permission denied”或“Unable to write to directory”,说明runtime和assets不可写。
宝塔重启PHP或一键部署后常自动执行 chown -R www:www /www/wwwroot/your-site,但若项目是root用户git clone下来的,子目录属主仍为root,www用户无权写入runtime/。
手动修复:在SSH中运行 chown -R www:www /www/wwwroot/your-site/runtime /www/wwwroot/your-site/assets,并确保目录权限为755(非777)。
伪静态规则必须启用且匹配Nginx语法
方法一:在宝塔站点设置 → 伪静态 → 选择「Laravel5」模板(其重写逻辑与Yii2一致)。
方法二:手动粘贴Nginx规则,注意只用这一段:
location / {<br> try_files $uri $uri/ /index.php?$args;<br>}【别复制Apache的.htaccess内容】,Nginx不识别RewriteRule;也别加if判断,容易引发404或无限重定向。
改完立刻点「重载配置」,否则规则不生效。启用urlManager['enablePrettyUrl'] = true后仍跳转到index.php,先检查web.php中showScriptName是否设为false。
数据库迁移前必须先配置cookieValidationKey
第一步:打开 /config/web.php,找到cookieValidationKey项。
第二步:确认该字段值不为空,例如:'cookieValidationKey' => 'ZzXxYyWwVvUuTtSsRrQqPpOoNnMmLlKkJjIiHhGgFfEeDdCcBbAa'。
第三步:如果值是空字符串或注释状态,migration命令会因CSRF验证失败而中断,报错信息隐晦,常被误判为数据库连接问题。
使用composer create-project创建的项目会自动生成密钥,但手动解压包或从旧项目拷贝过来的,这一步极易遗漏。
Composer插件缺失会导致asset发布失败
执行 php yii asset/compress 或访问前端资源时出现404,大概率是缺少fxp/composer-asset-plugin。
运行命令安装:composer global require "fxp/composer-asset-plugin:^1.4.7"(注意:Yii2.0.55需对应1.4.x版本,1.5+已不兼容)。
装完后删掉vendor目录重新 composer install,否则旧缓存会继续干扰asset发布流程。


















