FinchUI 城市分站插件

一套 Z-Blog 站点,瞬间拆出 N 个城市分站--「北京装修网」「上海装修网」「广州装修网」各自独立 URL、独立 SEO、独立内容池,但共用同一个后台和分类树。一篇文章只发一次,按城市归属即可在对应分站亮相,永远不重复劳动;空城市自动跳走、跨城文章自动 302,搜索引擎不会再收录重复或空壳页面。支持 txt 批量导入文章(键值对格式,标签自动创建),支持批量设置城市首页 SEO(块状多行,标题/关键词/描述),大幅降低多城内容填充门槛。内置整页 HTML 缓存管理(文件/APCu/Memcached/Redis 四档后端可切换),文章多也不怕 502。标签可按城市隔离或聚合到主站,由开关自由切换。专为想吃「地域词流量」红利的本地服务、招商加盟、连锁品牌、本地资讯、房产汽车等行业打造。无需修改主题,安装即用,需 Z-Blog 开启伪静态。

版本 1.0.9 更新 2026-07-21 全部作品 作者 星岚工作室
  • 2026 07-22

    v1.0.9

    修复已知问题:批量设置城市 SEO 导致城市清单清空、城市删除 CSRF 失效、演示数据清理误删用户标签与分类、整页缓存与批量操作的数据一致性等

    • 修复 重写城市首页 SEO 存储与批量修改流程:标题、关键词、描述改为原子写入 zb_users/data/fui_citysubsite/city-seo.json,不再写入历史城市表的 city_Seo* 列,彻底绕过旧站数据库列字符集异常导致的 MySQL 1366;批量 SEO 只更新独立 SEO 文件,不再全量重写城市清单,已有数据库 SEO 数据会在首次写入时自动继承。另修复字段解析正则缺少 UTF-8 模式,将中文全角冒号拆成单字节并把残缺字节写入标题、导致 JSON 编码失败的问题。
    • 修复 修复城市分站首页关键词和描述设置后不生效的问题:部分主题会在模板渲染阶段重新计算并覆盖 keywords/description,现改为在最终 HTML 的 head 中移除主题同名 meta 后注入城市级配置,保证跨主题生效且不产生重复标签;保存城市 SEO 后同步清空整页缓存。
    • 修复 修复「删除城市」操作因前端为 GET 链接但服务端要求 CSRF Token 导致正常点击被拒绝的问题。删除改为带 csrfToken 的 POST 表单提交。
    • 修复 修复「清除演示数据」会误删导入前已存在的同名标签(演示导入复用了既有标签但记录了其 ID)的问题,改为仅记录本次实际新建的标签;同时演示分类下若仍有文章则保留分类,避免把用户后来放入的真实文章重分类到默认分类。
    • 修复 修复批量导入文章、批量修改文章城市、导入/清除演示数据后未失效整页 HTML 缓存导致访客持续看到旧内容的问题,这些操作完成后现在会自动清空整页缓存。
    • 修复 修复开启 IP 自动切换时整页缓存未按访客 Cookie/IP 隔离,导致某访客的个性化城市推荐提示被缓存并展示给其他访客的问题。开启 IP 自动切换时不再写入整页缓存。
    • 修复 修复「跨子域 Cookie 共享」配置允许端口导致浏览器静默拒绝 Cookie 的问题,校验规则不再接受端口。
    • 其他 收紧缓存预热端点 SSRF 防护:不再将请求 Host 直接加入允许列表,并禁用 cURL 自动跟随重定向,避免受限管理员触发的预热请求被跳转到非本站目标。
    • 新增 新增全国 sitemap 索引(sitemap.php?index=1),自动列出全国主站 sitemap 与全部已启用城市的 sitemap;基础设置页面提供可直接提交搜索引擎的索引地址。
  • 2026 07-20

    v1.0.8

    新增整页 HTML 缓存管理(文件/APCu/Memcached/Redis 四档后端可切换);新增标签按城市隔离开关;城市清单支持分页

    • 新增 新增「缓存管理」页面(城市分站 -> 缓存管理):实现整页 HTML 缓存,未登录访客访问城市首页/分类/标签/文章详情等页面时,命中缓存直接返回最终 HTML,跳过全部数据库查询、URL 改写与模板编译,QPS 可提升 1-2 个数量级,有效解决文章数量较多导致的服务器负载过高和 502 错误问题。
    • 新增 缓存管理支持四档存储后端由后台自由切换:A. 文件缓存(默认,零依赖,兼容性 100%);B. APCu(PHP 官方扩展,共享内存命中 <0.5ms,比文件快 10-100 倍);C1. Memcached / C2. Redis(独立服务,支持多机共享,适合负载均衡部署)。另提供「自动」选项按 APCu->Redis->Memcached->文件 顺序探测。Memcached/Redis 连接失败自动降级为文件缓存。
    • 新增 缓存刷新支持三种粒度:全站一键清空、按城市清空、按 URL 单条刷新;并提供「预热各城市首页」一键功能(AJAX 逐个访问各城市首页触发缓存生成)。文章保存/删除自动失效该城市首页+详情页+分类页+全国主站首页相关缓存。
    • 新增 缓存安全策略:登录用户、预览模式、POST 请求、搜索结果、订阅、API、白名单路径一律不缓存;非 200 响应、非 text/html 内容不写入缓存;缓存键基于 host+原始请求 URI+城市 code 三重隔离,避免子目录模式撞键。
    • 新增 基础设置-高级设置新增「标签按城市隔离」开关:开启(默认)时城市分站下的标签链接带当前城市前缀、标签列表页仅显示当前城市的文章,本地 SEO 信号最纯净;关闭时标签链接统一指向主站绑定域名、标签列表页显示该标签下全部文章,适合希望标签权重集中到主站或各城市标签内容过少需要聚合的场景。关闭后直接访问分站标签 URL 会自动 302 到主站。
    • 其他 城市清单列表支持分页,每页最多显示 50 个城市,顶部和底部均提供分页导航;文章数统计改为仅统计当前页城市,避免城市较多时后台一次执行大量 COUNT 查询。
  • 2026 07-15

    v1.0.7

    新增批量设置城市首页 SEO;批量设置城市标语/域名/SEO 均支持上传 txt 文件

    • 新增 城市清单页新增「批量设置城市首页 SEO」功能:采用块状多行格式(### 城市名称 开头一个块),支持 标题:/ 关键词:/ 描述: 三个字段标记(中英文均可),字段可省略(保留原值)或留空(清空),描述可跨多行;城市名支持名称、code、带「市」后缀等多种写法。
    • 新增 「批量设置城市标语」「批量设置城市域名」「批量设置城市首页 SEO」三个表单均新增 txt 文件上传支持:表单加 enctype=multipart/form-data 与文件选择按钮,可上传 txt 文件或粘贴到文本框,二选一(上传文件优先)。避免大文件受浏览器或 PHP 输入限制。
  • 2026 07-10

    v1.0.6

    新增文章管理(批量导入 + 批量修改);文章编辑器级城市选择器 + Z-Blog 自带时间选择器

    • 新增 新增「文章管理」页面(城市分站 → 文章管理),内含「批量导入」和「批量修改」两个功能页,默认显示批量导入。
    • 新增 批量导入:上传 txt 文件或粘贴文本即可批量创建文章,每篇只需标题 + 正文,标签可选;可统一设置城市、分类、状态、作者、发布日期和间隔时间。
    • 新增 批量修改:支持按文章 ID、分类、当前所属城市、状态、作者等条件筛选文章,先预览确认再批量修改所属城市,也可批量设为「全国」让文章在所有分站可见。
  • 2026 07-05

    v1.0.5

    批量添加城市新增「业务词组合域名」模式;城市清单入口网址支持点击新标签页访问

    • 新增 批量添加城市—使用默认独立二级域名新增「业务词组合」选项:可在 slug 与根域名之间插入自定义业务词,生成 {slug}-{业务词}.根域名 或 {业务词}-{slug}.根域名;支持选择前缀/后缀位置,实时预览。适用于将纯城市二级域名(如 beijing.example.com)留给其他项目,城市分站改用带业务词的二级域名(如 beijing-wangzhanjianshe.example.com)。
    • 新增 城市清单入口网址列(入口类型 + 入口)改为可点击链接,target=_blank 在新标签页直接访问对应城市前端页面;含 rel=noopener noreferrer 安全属性。
  • 2026 07-01

    v1.0.4

    提升导航栏注入兼容性:通过后端导航标记精准匹配主菜单容器

    • 其他 导航栏注入切换按钮改为后端标记 + 前端匹配模式:PHP 侧读取 Z-Blog 导航栏模块(navbar)中的 li id 标记(navbar-page-*/navbar-category-*/navbar-tag-*)写入 data-nav-markers;前端优先按标记匹配主导航 ul,避免误注入到登录/注册等非主导航列表。
    • 其他 当主题存在多个 class 相似的 ul 列表(如重复 navbar 容器)时,前端优先选择直接子级 li 中命中 navbar-* 标记最多的那个容器,跳过嵌套在父级 li 内的子菜单列表,大幅降低老旧主题误匹配概率。
    • 其他 导航栏选择器默认值已将 .navbar ul 纳入候选范围,多数主题无需手动填写即可正确注入。
  • 2026 06-29

    v1.0.3

    修复已知问题

    • 修复 修复文章编辑页选择城市后未正确写入 log_geo_City 字段的问题;编辑器新增 name=City 隐藏字段,前端实时同步最终城市 code,确保 Z-Blog 通过 datainfo 映射自动落库。
  • 2026 06-28

    v1.0.2

    修复别名取文方法不存在导致 512 错误;页面详情页跳转边界修正

    • 修复 修复 ViewPost 跨城检查中调用不存在的 GetPostByAlias 方法,改为兼容 Z-Blog 1.7.5 的 GetPostList 别名查询(log_Alias/log_Title/log_ID),消除 [Error] (512) ZBlogPHP未知方法或属性报错。
    • 修复 页面详情页(log_Type=1)提前按 posttype 标记 is_page_view 并短路返回,不再误走跨城跳转逻辑,确保页面 canonical 正确指向全国主站。
  • 2026 06-26

    v1.0.1

    移除默认城市功能;修复 URL 重写与搜索路由;城市切换器样式深色模式兼容

    • 修复 整页 URL 重写(ob_start 兜底)修复:相对路径链接不再被错误地改写为城市子目录前缀,避免图片/资源 404。
    • 修复 独立域名分站搜索表单与链接统一指向根域名 /search.php(同域提交),避免跨域跳转和搜索结果异常。
    • 其他 城市切换器 CSS 全面重构为令牌化变量体系(--fui-cs-*),切换器自身显式锁定浅色样式,不受宿主主题深色/夜间模式全局规则污染。
    • 其他 兼容 FinchUI 系列主题深色模式(body.fui-dark):通过变量覆盖实现无缝暗色切换,包括弹窗卡片、搜索框、字母索引、城市列表、IP 提示条全部组件。
    • 其他 配色对齐 FinchUI 主题风格:主色改为 #0069cc,替换旧版 #1d4c7d;字体栈、边框色、阴影均与 FinchUI 设计体系保持一致。
  • 2026 06-18

    v1.0.0

    首次发布,支持文章按城市归属、子目录/独立域名分站、IP 推荐、SEO 标题模板

    • 新增 文章编辑页新增「所属城市」选择,支持「全国(不限城市)」选项;选定城市的文章仅在对应分站显示,未选城市的文章作为公共内容在所有分站显示。
    • 新增 后台「城市分站管理」页可维护城市清单:每个城市可绑定独立子目录或独立访问网址(包含二级域名),未填子目录时根据城市中文名自动生成拼音 slug。
    • 新增 访问 /bj/、bj.example.com 等城市分站入口,文章列表与单篇校验仅展示当前城市内容;跨城访问的文章 302 重定向到正确城市;空城市子站 302 到根域名首页。
    • 新增 搜索表单与链接自动改写为根域名 /search.php?q=xxx&fui_cs_city={code},搜索结果按城市过滤并在标题展示分站标识。
    • 新增 内置 IP 库(qqwry / ip2region)与可配置多家第三方 IP API;根域名首次访问时按 IP 给出分站推荐(轻量提示条,不强制跳转);用户主动切换后 cookie 记录手动选择,不再被 IP 改写。
    • 新增 全局 SEO 标题模板:分别配置文章页、分类页、城市首页的 <title> 结构,支持 {城市} {分类} {文章标题} {站点名} 等占位符。
    • 新增 城市级首页 SEO:每个城市可设置独立的首页 SEO 标题、关键词、描述,仅对该城市首页生效,优先级高于全局模板。
    • 新增 每城市页面自动注入 canonical;提供按城市过滤的 sitemap.xml。
    • 新增 悬浮城市切换器:右下角自动注入,支持按域名/子目录/query 三种模式跳转;可通过模板辅助函数 fui_citysubsite_switcher() 自定义嵌入。