多站点与多语言

一套代码跑多个域名(站群),以及后台界面与前台模板的多语言做法。含部署时必须先做的 nginx 配置。

约 8 分钟 扩展 代码块右上角可一键复制
本页目录(8 分钟读完)

这一章只做两件事:开站群、做多语言。分开讲,不掺。

打不开 → 看 排错手册。

怎么开站群#

作用:一套程序、一个后台,管多个域名。

步骤:

第 1 步:装插件

  1. 后台 → 插件 → 插件管理
  2. 启用「多站点」(multi-site)
  3. 跑 php aucms cache:rebuild

第 2 步:把分站域名加进服务器

文本
⚠ 这一步不做,分站域名直接 403。

宝塔面板:

  1. 网站 → 设置 → 域名管理
  2. 添加分站域名(b.com、c.com…)
  3. 保存

命令行:在 server_name 里加上去

Nginx
server_name a.com b.com c.com;

第 3 步:后台建分站

  1. 后台 → 插件 → 多站点(/admin/plugin/multi-site)
  2. 点「新增分站」
  3. 填分站域名
  4. 点「保存」
文本
主站不用建记录。
没匹配到任何分站域名的访问,都按主站处理。

效果:访问 b.com 显示分站,访问 a.com 显示主站。

打不开? → 看 排错手册

每个分站能单独配什么#

作用:让每个站看起来不一样。

进后台 → 插件 → 多站点 → 点开某个分站:

配置项填什么效果
站点名称各站自己的名字浏览器标题、页头
标题/关键词/描述各站自己的 SEO搜索结果
Logo各站自己的图页头
备案号/版权/统计各站自己的页脚
前台模板可以用不同主题长相不同
伪原创前缀内容标题前加字避免内容全一样
URL 结构见下表网址形态
关闭站点开/关关了返回 503

URL 结构怎么选:

结构详情页长这样适合
system/article/123.html默认,最通用
short/a/123.html微信分享
news/news/123.html新闻站
文本
切换结构后老链接不会失效。
但 sitemap 会变,要重新提交。

打不开? → 看 排错手册

内容怎么分给不同站#

作用:决定每个站显示哪些内容。

两种做法,选一种:

做法怎么做适合
共用内容池各站只展示自己的栏目同城多站,内容结构一样
各自一套栏目分站只绑指定栏目完全独立的站

操作步骤:

  1. 后台 → 内容 → 栏目管理
  2. 给每个站建自己的栏目
  3. 后台 → 插件 → 多站点 → 分站设置
  4. 给分站绑定各自的栏目
  5. 保存
文本
不要给内容加 site_id 字段。
那要改核心表,升级会冲突。
正确做法:用栏目分组 + 设置覆盖。

打不开? → 看 排错手册

站群上线前检查#

检查项怎么查
每个域名都在 nginx server_name 里宝塔域名管理里看
每个域名都签了 HTTPS 证书逐个访问 https://
每个分站的站名/SEO/统计/备案改了后台分站设置里看
每个分站指定了不同模板别全用同一个
分站栏目互不重叠栏目管理里看
每个域名的 sitemap 能打开访问 域名/sitemap.xml
清过一次缓存见下

清缓存防串站:

Shell
php aucms cache:clear
redis-cli del aucms:setting:all

打不开? → 看 排错手册

站群最容易出问题的五件事#

现象原因修法
分站 403域名没加进 server_name加进去
分站显示主站配置缓存串了清 aucms:setting:all
分站证书错误只签了主域名给每个域名单独签
sitemap 混了别的站栏目没隔离干净重新绑栏目
统计全算一个号统计代码没改各站填自己的

还没解决?→ 看 排错手册

怎么切后台界面语言#

作用:后台菜单变中文/英文。

步骤:

  1. 后台 → 系统设置 → 基础设置
  2. 「界面语言」选 zh-cn 或 en-us
  3. 点「保存」
  4. 跑 php aucms cache:clear

效果:后台菜单、按钮文字跟着变。

语言包在哪:lang/zh-cn/*.php、lang/en-us/*.php。

文本
{lang} 只支持单一 key,不支持占位符。
要带参数的词条,只能在 PHP 里拼。

打不开? → 看 排错手册

怎么做英文前台#

作用:前台显示英文。

步骤:

  1. 后台 → 系统设置 → 基础设置
  2. 「前台模板」选 en
  3. 点「保存」
  4. 跑 php aucms cache:clear

效果:前台文字变英文。

文本
自带的 view/en 只是「能跑」的英文版。
做外贸站建议复制 view/en 改成自己的。

打不开? → 看 排错手册

怎么做真正的双语站#

三种做法,按省事程度排:

做法怎么做推荐吗
两个域名两个站a.com + en.a.com,用多站点分开★ 推荐
同域名加语言参数a.com/en/...,要自己写路由不推荐
只做英文单站直接切 view/en最省事

推荐做法的步骤:

  1. 按前面「怎么开站群」建两个站
  2. 中文站用 default 主题
  3. 英文站用 en 主题
  4. 各自提交各自的 sitemap

双语站必做三件事:

做什么在哪加
声明页面语言<html lang="en">
声明对应关系<link rel="alternate" hreflang="...">
各交各的 sitemap别混在一个里
HTML
<link rel="alternate" hreflang="zh-CN" href="https://example.com/article/123.html">
<link rel="alternate" hreflang="en"    href="https://en.example.com/article/123.html">
<link rel="alternate" hreflang="x-default" href="https://example.com/article/123.html">

打不开? → 看 排错手册

给会 PHP 的人:怎么按域名改设置#

作用:在自己的插件里按域名覆盖站点名等。

系统留了两个扩展点:

扩展点用来干什么
setting_get按域名覆盖站点名称/Logo/SEO
content_url按站点规则改写内容链接
PHP
add_action('setting_get', function ($value, $key) {
    if ($key !== 'site_name') {
        return $value;
    }
    $host = isset($_SERVER['HTTP_HOST']) ? strtolower($_SERVER['HTTP_HOST']) : '';
    if ($host === 'en.example.com') {
        return 'My English Site';
    }
    return $value;
}, 20);
文本
返回原值 = 不覆盖。
回调里不要做重查询,它每个请求会被调用几十次。
回调里再读别的设置项是安全的,有递归保护。
没找到答案? 在后台「缓存与维护 → 系统体检」里看环境是否正常;仍无解就打开 server_debug.php 复现一次,页面会直接告诉你异常文件与行号。