MAMP运行Yii2需将DocumentRoot指向web/目录,启用mod_rewrite并配置AllowOverride All,数据库连接应指定MAMP的MySQL socket路径或使用127.0.0.1,确保vendor/autoload.php可加载且.htaccess有效。

Mac上用MAMP跑Yii2为什么总报错 DocumentRoot 不匹配
因为MAMP默认把项目放在 /Applications/MAMP/htdocs/,但Yii2的Web根目录其实是 web/ 子目录,不是项目根目录。Apache直接指向项目根,就会暴露 config/、controllers/ 这些敏感目录,PHP也常因路径问题加载失败。
- 必须把虚拟主机的
DocumentRoot指向 Yii2 项目的web/目录,比如/Users/yourname/myapp/web - MAMP 的 Apache 配置文件在
/Applications/MAMP/conf/apache/httpd.conf,别改错位置;改完要重启 MAMP(不是只刷新页面) - 如果用 MAMP Pro,直接在 GUI 里选中站点 → “Host Settings” → “Document Root”,填绝对路径到
web/目录即可
访问时提示 Class 'yii\web\Application' not found
Composer 依赖没装全,或 vendor/ 路径被 Apache 错误地当成了 Web 可访问目录,导致自动加载失效。Yii2 的入口脚本 web/index.php 依赖 vendor/autoload.php,这个文件必须能被正确 require。
- 确保在项目根目录下执行了
composer install(不是composer create-project后就不管了) - 检查
web/index.php开头的require __DIR__ . '/../vendor/autoload.php';路径是否正确——../vendor是相对于web/的,所以项目结构必须是:myapp/ → web/, vendor/, composer.json - 别把整个 Yii2 项目拖进
htdocs/再用子目录访问,比如localhost:8888/myapp/web/,这种路径会让index.php的相对引用全部错位
启用重写后仍出现 404 Not Found(如访问 /site/about)
MAMP 自带的 Apache 默认禁用了 .htaccess 解析,而 Yii2 的 URL 美化依赖它做路由转发。即使你写了 urlManager 配置,没有底层重写支持,请求根本到不了 PHP。
- 打开
/Applications/MAMP/conf/apache/httpd.conf,确认这两行已取消注释:LoadModule rewrite_module modules/mod_rewrite.so和Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf - 在对应虚拟主机配置块里加上:
AllowOverride All(必须放在<directory></directory>块内) - 确认
web/.htaccess文件存在且内容是 Yii2 官方标准版本(含RewriteEngine On和正确RewriteRule)
数据库连不上,报错 SQLSTATE[HY000] [2002] No such file or directory
MAMP 的 MySQL socket 路径不是系统默认的 /tmp/mysql.sock,而是 /Applications/MAMP/tmp/mysql/mysql.sock。Yii2 的 db 配置如果只写了 'host' => 'localhost',PDO 会尝试走 TCP 连接,但 MAMP 默认关闭远程连接,且有时 DNS 解析 localhost 成 127.0.0.1 后反而绕过 socket。
- 在
config/db.php中显式指定 unix socket:'dsn' => 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=myapp', - 或者改用
'host' => '127.0.0.1'强制走 TCP,并在 MAMP → Preferences → MySQL → “Allow network access to MySQL” 打钩(仅调试用,上线关掉) - 别信网上说“把 socket 软链到 /tmp”的方案——MAMP 更新后路径可能变,硬编码更稳
路径拼错、socket 文件权限不对、MySQL 实际没运行——这三类问题占了本地部署失败的八成。每次改完配置,记得点 MAMP 左上角“Stop Servers”再“Start Servers”,别只点刷新。


















