Skip to content

MacCMS 部署排障大全 ​

自建 MacCMS 最容易卡住的就是环境和配置。下面把常见故障按"症状 → 原因 → 解决"列清楚,照着排基本都能解决。MacCMS V10 基于 ThinkPHP5,很多问题其实是框架和环境的通病。

除首页外全部 404 ​

症状:首页能打开,点进任何栏目、详情、后台都报 404。

原因:伪静态没配。ThinkPHP5 的路由要靠 Web 服务器把请求转发给入口文件,没配规则时只有首页能命中。

解决:按你的服务器加伪静态规则。

Nginx:

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):

apache
<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:

php
return [
    'hostname' => '127.0.0.1',
    'database' => '数据库名',
    'username' => '用户名',
    'password' => '密码',
    'hostport' => '3306',
];

逐项核对:hostname 一般是 127.0.0.1、hostport 默认 3306;确认数据库已创建、账号密码正确、账号对这个库有权限。

后台打不开 / 后台 404 ​

症状:前台正常,但进后台报 404,或忘了后台在哪。

原因:后台入口是 admin.php,如果装完改过名字(出于安全推荐改),用老地址自然进不去;也可能是伪静态没配到 admin.php 这一行。

解决:

  • 默认后台地址是 https://域名/admin.php。
  • 改过名的,去网站根目录找你自己起的那个 xxx.php,用"域名 + 该文件名"访问。
  • 若后台仍 404,回头检查伪静态规则里有没有 admin.php 那条(见上面"除首页外全部 404")。

采集之后没有数据 ​

症状:采集任务跑了,前台却没影视数据。

原因:常见三种——分类没绑定、资源站本身没这个分类的数据、采集任务参数不对。

解决:

  1. 进后台确认采集时分类绑定做了:把资源站的分类映射到你自己的分类上,没绑的分类不会采。
  2. 换个有数据的分类试,确认资源站该分类确实有内容。
  3. 看采集日志有没有报错。
  4. 采集流程完整步骤见采集教程。

接口返回空数据 ​

症状:对接空壳影视或别的 App 时,接口能打开但 list 是空的。

原因:库里本来就没数据,或请求的分类 ID 不对。

解决:先确认库里有影视数据,再直接测接口:

/api.php/provide/vod/?ac=videolist

能返回带 list 的 JSON 就说明接口本身没问题,再逐步加 t=分类ID、wd=关键词 等参数定位。

CORS 跨域取不到数据 ​

症状:接口在浏览器里能打开,App 或网页端却取不到数据,控制台报跨域。

原因:服务器没放开跨域访问。

解决:在 Web 服务器给接口加跨域响应头。Nginx 示例:

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

重装会动数据

重装可能覆盖现有数据,操作前先备份数据库。


装完别忘了做安全加固,自建站暴露在公网上,不加固风险不小。