Featured image of post 不同的baseurl服务器发布办法

不同的baseurl服务器发布办法

此方法不实用

第一步:修改主配置文件 _config.yml

请从主配置文件的 deploy 列表中删除 ZZ.AC 的那三行。修改后的末尾应该像这样:

YAML

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ... 前面保持不变 ...
url: http://zsb.hidns.co
root: /

deploy:
  - type: git
    repo: git@github.com:zhisibi/zhisibi.github.io.git
    branch: main
  - type: git
    repo: ssh://luoyuqisi@s1.ct8.pl/home/luoyuqisi/repos/blog.git
    branch: main

# ... 后面保持不变 ...

第二步:新建 ZZ.AC 专用配置文件 _config.zzac.yml

在博客根目录下新建这个文件。它只需要包含差异部分,Hexo 在运行时会自动用它覆盖主配置:

YAML

1
2
3
4
5
6
7
8
# 专门针对公益主机的差异化配置
url: https://lab.bosh.zz.ac/blog
root: /blog/

deploy:
  - type: git
    repo: ssh://bosh@lab.bosh.zz.ac/home/bosh/repos/blog.git
    branch: main

第三步:更新自动化脚本 博士日常博客管理系统.bat

这个脚本会通过两次“清理-生成-发布”流程,确保不同站点的路径完全隔离,互不干扰。

Bash

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
@echo off
chcp 65001 >nul
:menu
cls
echo ==========================================
echo       博士日常博客管理系统 (Windows)
echo ==========================================
echo 1) 写新文章 (hexo new)
echo 2) 本地预览 (hexo s)
echo 3) 全线发布 (GitHub + ct8.pl + ZZ.AC)
echo 4) 备份源码 (git push)
echo 5) 清理缓存 (hexo clean)
echo 6) 退出
echo ==========================================
set /p choice=请选择操作 [1-6]: 

if "%choice%"=="1" goto new_post
if "%choice%"=="2" goto preview
if "%choice%"=="3" goto deploy_all
if "%choice%"=="4" goto backup
if "%choice%"=="5" goto clean
if "%choice%"=="6" goto exit
goto menu

:new_post
set /p title=请输入文章标题: 
call hexo new "%title%"
pause
goto menu

:preview
echo 正在启动预览 (http://localhost:4000)...
call hexo s
goto menu

:deploy_all
echo >>> 正在清理并为 GitHub/ct8.pl 生成静态文件...
call hexo clean
call hexo g
echo >>> 正在发布至 GitHub & ct8.pl (Root: /)...
call hexo d
echo.
echo >>> 正在为 ZZ.AC 生成专用文件 (Root: /blog/)...
call hexo clean
:: 核心:同时加载两个配置
call hexo g --config _config.yml,_config.zzac.yml
echo >>> 正在发布至 ZZ.AC...
call hexo d --config _config.yml,_config.zzac.yml
echo ==========================================
echo 恭喜!所有服务器同步完成。
echo ==========================================
set /p b_choice=是否顺便备份源码到 Git? [y/n]: 
if /i "%b_choice%"=="y" goto backup
pause
goto menu

:backup
echo >>> 正在备份源码到远程仓库...
git add .
set /p msg=请输入提交信息 (直接回车使用当前日期): 
if "%msg%"=="" set msg=Backup_%date%
git commit -m "%msg%"
git push origin main
echo 源码备份成功。
pause
goto menu

:clean
call hexo clean
echo 缓存已清理。
pause
goto menu

:exit
exit

这个方案如何解决你的问题?

  1. 路径自动修正:当执行带有 _config.zzac.yml 的命令时,Hexo 会把所有的内部资源链接(如 /css/main.css)自动重写为 /blog/css/main.css。这样你在点击博文时,URL 就会变成 .../blog/2025/12/31/...,从而被 Caddy 准确捕获。

  2. 避免误伤:在发布 GitHub 时,脚本只用了原配,所以 GitHub 上的页面链接依然是干净的根路径。

  3. Caddyfile 简化:现在你可以把 Caddy 的配置改回最标准的形式,不再需要那个“万能后备”处理了:

    代码段

    1
    2
    3
    4
    5
    
    :8080 {
        handle_path /blog* {
            reverse_proxy localhost:8082
        }
    }
    

最后一步建议: 由于你使用了 Git 方式发布到 ZZ.AC,请确保 ZZ.AC 端的 Git 仓库配置了 post-receive 钩子,以便在你推送代码后,它能自动把文件同步到 8082 端口对应的 Web 目录中。如果你还没配置这个钩子,我可以提供给你。

热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计