MacCMS 部署排障大全
自建 MacCMS 最容易卡住的就是环境和配置。下面把常见故障按"症状 → 原因 → 解决"列清楚,照着排基本都能解决。MacCMS V10 基于 ThinkPHP5,很多问题其实是框架和环境的通病。
除首页外全部 404
症状:首页能打开,点进任何栏目、详情、后台都报 404。
原因:伪静态没配。ThinkPHP5 的路由要靠 Web 服务器把请求转发给入口文件,没配规则时只有首页能命中。
解决:按你的服务器加伪静态规则。
Nginx:
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}Apache(网站根目录放 .htaccess,并确认开了 mod_rewrite):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>改过入口名的注意
如果你把 admin.php、api.php 改成了别的名字,上面规则里对应的那行也要一起改。
PHP 8.x 各种类型报错
症状:装好或升级 PHP 后,前台 / 后台白屏或报错,常见一条是:
Argument #2 ($array) must be of type ?array, string given原因:MacCMS V10 用的 ThinkPHP5 比较老,和 PHP 8.x 的严格类型声明冲突。能勉强跑,但各种边角会出错。
解决:把 PHP 版本切回 7.x(宝塔面板里网站设置能直接切)。PHP 7.x 是跑 MacCMS V10 最稳的选择,装站时就建议直接选它,少踩这类坑。
数据库连接失败
症状:访问报数据库连接错误,或安装时填完库信息过不去。
原因:数据库配置填错,或库 / 账号还没建。
解决:检查 /application/database.php:
return [
'hostname' => '127.0.0.1',
'database' => '数据库名',
'username' => '用户名',
'password' => '密码',
'hostport' => '3306',
];逐项核对:hostname 一般是 127.0.0.1、hostport 默认 3306;确认数据库已创建、账号密码正确、账号对这个库有权限。
后台打不开 / 后台 404 / 提示"请将 admin.php 改名"
症状:前台正常,但进后台打不开,看到一句"请将后台入口文件 admin.php 改名",或报 404,或忘了后台在哪。
原因:有两种,先分清:
- 没改名:MacCMS 的
admin.php源码里写死了强制改名检查(第 36–39 行)——只要访问路径里还带着/admin.php,程序直接echo一句"请将后台入口文件 admin.php 改名…"然后exit,根本不会加载后台。这不是报错,是源码强制要求你改名。index.php/api.php没有这个检查。 - 改过名但地址/伪静态不对:装完改过文件名后用老地址访问,或伪静态没配到后台入口那一行。
解决:
- 装完必须把
admin.php改名(见安装教程),改成别人猜不到的名字如admin7854.php,用"域名 + 新文件名"访问,例如https://域名/admin7854.php。 - 还在用
admin.php访问、看到改名提示:这是正常拦截,照上一步改名即可。 - 改过名仍 404:回头检查伪静态规则里有没有对应入口文件那条(见上面"除首页外全部 404"),改过名的话规则里的
admin.php也要同步改成新文件名。
采集之后没有数据
症状:采集任务跑了,前台却没影视数据。
原因:常见三种——分类没绑定、资源站本身没这个分类的数据、采集任务参数不对。
解决:
- 进后台确认采集时分类绑定做了:把资源站的分类映射到你自己的分类上,没绑的分类不会采。
- 换个有数据的分类试,确认资源站该分类确实有内容。
- 看采集日志有没有报错。
- 采集流程完整步骤见采集教程。
接口返回空数据
症状:对接空壳影视或别的 App 时,接口能打开但 list 是空的。
原因:库里本来就没数据,或请求的分类 ID 不对。
解决:先确认库里有影视数据,再直接测接口:
/api.php/provide/vod/?ac=videolist能返回带 list 的 JSON 就说明接口本身没问题,再逐步加 t=分类ID、wd=关键词 等参数定位。
CORS 跨域取不到数据
症状:接口在浏览器里能打开,App 或网页端却取不到数据,控制台报跨域。
原因:服务器没放开跨域访问。
解决:在 Web 服务器给接口加跨域响应头。Nginx 示例:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type";生产环境建议把 * 换成具体允许的来源域名,别一直全开。
想重装 / 清掉安装状态
症状:想重新走一遍安装,但访问域名直接进了前台,不弹安装界面。
原因:装过一次后会生成安装锁文件,挡住重复安装。
解决:删掉锁文件,再访问域名就会重新进安装界面:
/application/data/install/install.lock重装会动数据
重装可能覆盖现有数据,操作前先备份数据库。
装完别忘了做安全加固,自建站暴露在公网上,不加固风险不小。