多站点与多语言
一套代码跑多个域名(站群),以及后台界面与前台模板的多语言做法。含部署时必须先做的 nginx 配置。
约 8 分钟
扩展
代码块右上角可一键复制
本页目录(8 分钟读完)
这一章只做两件事:开站群、做多语言。分开讲,不掺。
打不开 → 看 排错手册。
怎么开站群#
作用:一套程序、一个后台,管多个域名。
步骤:
第 1 步:装插件
- 后台 → 插件 → 插件管理
- 启用「多站点」(
multi-site) - 跑
php aucms cache:rebuild
第 2 步:把分站域名加进服务器
⚠ 这一步不做,分站域名直接 403。宝塔面板:
- 网站 → 设置 → 域名管理
- 添加分站域名(b.com、c.com…)
- 保存
命令行:在 server_name 里加上去
server_name a.com b.com c.com;第 3 步:后台建分站
- 后台 → 插件 → 多站点(
/admin/plugin/multi-site) - 点「新增分站」
- 填分站域名
- 点「保存」
主站不用建记录。
没匹配到任何分站域名的访问,都按主站处理。效果:访问 b.com 显示分站,访问 a.com 显示主站。
打不开? → 看 排错手册
每个分站能单独配什么#
作用:让每个站看起来不一样。
进后台 → 插件 → 多站点 → 点开某个分站:
| 配置项 | 填什么 | 效果 |
|---|---|---|
| 站点名称 | 各站自己的名字 | 浏览器标题、页头 |
| 标题/关键词/描述 | 各站自己的 SEO | 搜索结果 |
| Logo | 各站自己的图 | 页头 |
| 备案号/版权/统计 | 各站自己的 | 页脚 |
| 前台模板 | 可以用不同主题 | 长相不同 |
| 伪原创前缀 | 内容标题前加字 | 避免内容全一样 |
| URL 结构 | 见下表 | 网址形态 |
| 关闭站点 | 开/关 | 关了返回 503 |
URL 结构怎么选:
| 结构 | 详情页长这样 | 适合 |
|---|---|---|
system | /article/123.html | 默认,最通用 |
short | /a/123.html | 微信分享 |
news | /news/123.html | 新闻站 |
切换结构后老链接不会失效。
但 sitemap 会变,要重新提交。打不开? → 看 排错手册
内容怎么分给不同站#
作用:决定每个站显示哪些内容。
两种做法,选一种:
| 做法 | 怎么做 | 适合 |
|---|---|---|
| 共用内容池 | 各站只展示自己的栏目 | 同城多站,内容结构一样 |
| 各自一套栏目 | 分站只绑指定栏目 | 完全独立的站 |
操作步骤:
- 后台 → 内容 → 栏目管理
- 给每个站建自己的栏目
- 后台 → 插件 → 多站点 → 分站设置
- 给分站绑定各自的栏目
- 保存
不要给内容加 site_id 字段。
那要改核心表,升级会冲突。
正确做法:用栏目分组 + 设置覆盖。打不开? → 看 排错手册
站群上线前检查#
| 检查项 | 怎么查 |
|---|---|
| 每个域名都在 nginx server_name 里 | 宝塔域名管理里看 |
| 每个域名都签了 HTTPS 证书 | 逐个访问 https:// |
| 每个分站的站名/SEO/统计/备案改了 | 后台分站设置里看 |
| 每个分站指定了不同模板 | 别全用同一个 |
| 分站栏目互不重叠 | 栏目管理里看 |
| 每个域名的 sitemap 能打开 | 访问 域名/sitemap.xml |
| 清过一次缓存 | 见下 |
清缓存防串站:
php aucms cache:clear
redis-cli del aucms:setting:all打不开? → 看 排错手册
站群最容易出问题的五件事#
| 现象 | 原因 | 修法 |
|---|---|---|
| 分站 403 | 域名没加进 server_name | 加进去 |
| 分站显示主站配置 | 缓存串了 | 清 aucms:setting:all |
| 分站证书错误 | 只签了主域名 | 给每个域名单独签 |
| sitemap 混了别的站 | 栏目没隔离干净 | 重新绑栏目 |
| 统计全算一个号 | 统计代码没改 | 各站填自己的 |
还没解决?→ 看 排错手册
怎么切后台界面语言#
作用:后台菜单变中文/英文。
步骤:
- 后台 → 系统设置 → 基础设置
- 「界面语言」选
zh-cn或en-us - 点「保存」
- 跑
php aucms cache:clear
效果:后台菜单、按钮文字跟着变。
语言包在哪:lang/zh-cn/*.php、lang/en-us/*.php。
{lang} 只支持单一 key,不支持占位符。
要带参数的词条,只能在 PHP 里拼。打不开? → 看 排错手册
怎么做英文前台#
作用:前台显示英文。
步骤:
- 后台 → 系统设置 → 基础设置
- 「前台模板」选
en - 点「保存」
- 跑
php aucms cache:clear
效果:前台文字变英文。
自带的 view/en 只是「能跑」的英文版。
做外贸站建议复制 view/en 改成自己的。打不开? → 看 排错手册
怎么做真正的双语站#
三种做法,按省事程度排:
| 做法 | 怎么做 | 推荐吗 |
|---|---|---|
| 两个域名两个站 | a.com + en.a.com,用多站点分开 | ★ 推荐 |
| 同域名加语言参数 | a.com/en/...,要自己写路由 | 不推荐 |
| 只做英文单站 | 直接切 view/en | 最省事 |
推荐做法的步骤:
- 按前面「怎么开站群」建两个站
- 中文站用 default 主题
- 英文站用 en 主题
- 各自提交各自的 sitemap
双语站必做三件事:
| 做什么 | 在哪加 |
|---|---|
| 声明页面语言 | <html lang="en"> |
| 声明对应关系 | <link rel="alternate" hreflang="..."> |
| 各交各的 sitemap | 别混在一个里 |
<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 | 按站点规则改写内容链接 |
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 复现一次,页面会直接告诉你异常文件与行号。