## 修改如下

1. 大幅修改页面，更加正式
2. 添加可自定义项：
   1. 是否自动跳转
   2. 主题色
3. 自动获取页面信息和摘要（搭配[xaoxuu/site-info-api](https://github.com/xaoxuu/site-info-api/)）

![image](https://github.com/user-attachments/assets/03b33d20-42e0-41d7-91c0-dd9f7518d5f9)

**使用方法**：

```shell
#使用前删除原版
npm install hexo-safego-thun888
```

**示例完整配置**

```yaml
hexo_safego:
  # 基本功能设置
  general:
    enable: true                # 启用插件
    enable_base64_encode: true  # 使用 Base64 编码
    enable_target_blank: true   # 打开新窗口
    auto_redirect: false       # 自动重定向
  # 安全设置
  security:
    url_param_name: 'u'         # URL 参数名
    html_file_name: 'go.html'   # 重定向页面的文件名
    ignore_attrs:               # 忽略处理的 HTML 属性
      - 'data-fancybox'
  # 容器与页面设置
  scope:
    apply_containers:           # 应用的容器选择器
      - '.md-text'
    apply_pages:                # 应用的页面路径
      - "/2025/"
    exclude_pages:              # 排除的页面路径
  # 域名白名单
  whitelist:
    domain_whitelist:           # 允许的白名单域名
      - "hzchu.top"
      - "creativecommons.org"
  # 页面外观设置
  appearance:
    avatar: /favicon.ico   # 头像路径
    title: "Thun888"            # 页面标题
    subtitle: "安全中心"         # 页面副标题
    darkmode: true             # 是否启用深色模式
    countdowntime: 10           # 倒计时秒数
    theme_color: "#6bb418"      # 主题色
  # 调试设置
  debug:
    enable: false               # 启用调试模式
  siteinfo:
    enable: true
    api: https://siteinfo-api.hzchu.top/api/v1?url={href}
```


---

简体中文 | [English](README_en.md)

## hexo-safego

[NPM 发布地址](https://www.npmjs.com/package/hexo-safego) | [详细说明文档](https://blog.liushen.fun/posts/1dfd1f41/)

`hexo-safego` 是一个改进版的 Hexo 插件，用于处理外部链接以增强博客的安全性。该插件基于 [`hexo-external-link`](https://github.com/hvnobug/hexo-external-link) 二次开发，但其实现方式不同：原版插件通过注入 JS ，在打开网站时才处理外部链接，而 `hexo-safego` 则在生成静态页面时直接替换外部链接，并且提供了很多人性化的配置。

### 主要特性

- **外部链接跳转**：将外部链接替换为自定义的跳转页面，增加安全性。
- **灵活配置**：支持多个容器 ID、白名单域名和生效页面路径的配置。
- **Base64 编码**：可选的 Base64 编码功能。
- **调试模式**：调试模式输出详细信息，便于开发和调试。
- **自定义页面**：支持设置标题、副标题、头像、暗黑模式等。

### 安装

在使用该插件之前，需要先安装 `cheerio`，Hexo 一般有这个插件，可以在 `node_modules` 查看，如果没有，执行：

```bash
npm install cheerio --save
```

然后安装 `hexo-safego` 插件：

```bash
npm install hexo-safego --save
```

### 配置

在 Hexo 的配置文件 `_config.yml` 中添加以下配置：

```yaml
# hexo-safego安全跳转插件
# see https://blog.liushen.fun/posts/1dfd1f41/
hexo_safego:
  # 基本功能设置
  general:
    enable: true                # 启用插件
    enable_base64_encode: true  # 使用 Base64 编码
    enable_target_blank: true   # 从新窗口打开跳转页面

  # 安全设置
  security:
    url_param_name: 'u'         # URL 参数名
    html_file_name: 'go.html'   # 重定向页面的文件名
    ignore_attrs:               # 忽略处理的 HTML 结构
      - 'data-fancybox'

  # 容器与页面设置
  scope:
    apply_containers:           # 应用的容器选择器
      - '#article-container'
    apply_pages:                # 应用的页面路径
      - "/posts/"
      - "/devices/"
    exclude_pages:              # 排除的页面路径

  # 域名白名单
  whitelist:
    domain_whitelist:           # 允许的白名单域名，通过字符串匹配实现
      - "qyliu.top"
      - "liushen.fun"

  # 页面外观设置
  appearance:
    avatar: /info/avatar.ico    # 跳转页面头像路径
    title: "清羽飞扬"            # 跳转页面标题
    subtitle: "安全中心"         # 跳转页面副标题
    darkmode: auto              # 是否启用深色模式
    countdowntime: 4            # 跳转页面倒计时秒数，如果设置为负数则为不自动跳转

  # 调试设置
  debug:
    enable: false               # 启用调试模式
```

### 必要参数修改

- **`domain_whitelist`**: 该参数为您的站点根域名。此配置使用字符串匹配，如果外链中包含您填写的字符串，则会跳过该外链不进行处理。可以设置多个域名。
- **`apply_containers`**: 该参数为您希望处理的容器选择器。如果需要类名选择器，可以使用 `.类名` 进行筛选。如果希望匹配整个网站，请填写 `body` 或者置空 or 删除该配置项。由于我使用的是 Butterfly 主题，因此填写了 Butterfly 主题中文章部分的选择器 `#article-container` , 请按需设置。
- **`apply_pages`**: 该参数指定插件生效的页面路径。如果您只希望在文章页面中使用插件，可以像示例配置中一样设置路径为 `'/post/'`。如果希望插件在整个网站生效，可以设置为 `'/'` 或者置空 or 删除该项配置。
- **`avatar、title、subtitle`**: 请设置为您的个人信息，以提高头像显示速度。默认头像为 `jsdelivr` 图片，国内访问可能会影响加载速度。支持使用本地相对路径图片或网络图片链接。
- **注意**: 以上配置项中部分可能空值判断不准确，仅作为防止出现异常的处理，如果使用请尽量不要留空。如果您不需要某个配置项并希望使用默认值，请直接删除对应配置项或者设置为对应默认值。

### 参数说明

- **`general.enable`**:  
  - **类型**：`Boolean`
  - **默认值**：`false`
  - **描述**：是否启用 `hexo-safego` 插件。  
  - **说明**：设置为 `true` 启用插件，`false` 则禁用。

- **`general.enable_base64_encode`**:  
  - **类型**：`Boolean`
  - **默认值**：`true`
  - **描述**：是否对跳转链接进行 Base64 编码。  
  - **说明**：设置为 `true` 时，插件会对外链进行 Base64 编码，避免直接暴露 URL 信息。若不需要此功能，可设置为 `false`。

- **`general.enable_target_blank`**:  
  - **类型**：`Boolean`
  - **默认值**：`true`
  - **描述**：是否在跳转链接中添加 `target="_blank"` 属性，建议添加，可以在新页面打开。  
  - **说明**：设置为 `true` 时，外链将在新窗口打开。若希望在同一窗口打开外链，设置为 `false`。

- **`security.url_param_name`**:  
  - **类型**：`String`
  - **默认值**：`u`
  - **描述**：跳转页面的 URL 参数名称。  
  - **说明**：定义跳转页面的 URL 参数名称。例如，若设置为 `u`，则跳转 URL 将为 `go.html?u=http://example.com`。

- **`security.html_file_name`**:  
  - **类型**：`String`
  - **默认值**：`go.html`
  - **描述**：生成的跳转页面文件名。  
  - **说明**：定义生成的跳转页面文件名。您可以修改为其他名称以适应您的需求。

- **`security.ignore_attrs`**:  
  - **类型**：`Array`
  - **默认值**：`['data-fancybox']`
  - **描述**：需要忽略的链接属性列表。如果链接包含这些属性，将不会被处理。  
  - **说明**：当链接元素包含指定的属性时，将跳过该链接的处理。可以添加其他属性以忽略特定链接。

- **`scope.apply_containers`**:  
  - **类型**：`Array`
  - **默认值**：`['body']`
  - **描述**：指定要处理的容器 ID 列表。如果为空，则匹配整个 `body`。  
  - **说明**：设置要处理的容器，例如文章部分、侧边栏等。如果想处理整个页面，可以使用 `body` 或留空。

- **`scope.apply_pages`**:  
  - **类型**：`Array`
  - **默认值**：`['/']`
  - **描述**：生效页面路径列表，只有在这些页面上才会对链接进行处理。  
  - **说明**：您可以指定哪些页面启用插件。若要在整个网站上生效，设置为 `'/'`，或将该项留空。

- **`scope.exclude_pages`**:  
  - **类型**：`Array`
  - **默认值**：`[]`
  - **描述**：排除的页面路径列表，插件将不会在这些页面上生效。  
  - **说明**：如果有不想启用插件的页面，可以将其路径添加到该列表中。

- **`whitelist.domain_whitelist`**:  
  - **类型**：`Array`
  - **默认值**：`['example.com']`
  - **描述**：域名白名单列表，包含白名单中的域名的链接将被忽略。  
  - **说明**：该配置项允许您设置站点的白名单域名，防止插件对这些外链进行跳转处理。支持多个域名。

- **`appearance.avatar`**:  
  - **类型**：`String`
  - **默认值**：`https://fastly.jsdelivr.net/gh/willow-god/hexo-safego@latest/lib/avatar.png`
  - **描述**：跳转页面的头像图片链接，支持相对路径本地图片和绝对路径网络图片。  
  - **说明**：可以设置为您自己的头像图片路径，支持使用本地或网络图片链接。

- **`appearance.title`**:  
  - **类型**：`String`
  - **默认值**：`网站名称`
  - **描述**：跳转页面的标题。  
  - **说明**：设置跳转页面的标题，通常可以填写网站的名称或标语。

- **`appearance.subtitle`**:  
  - **类型**：`String`
  - **默认值**：`网站副标题`
  - **描述**：跳转页面的副标题。  
  - **说明**：设置跳转页面的副标题，通常用于简短描述网站的内容。

- **`appearance.darkmode`**:  
  - **类型**：`Boolean`/`auto`
  - **默认值**：`false`
  - **描述**：是否启用夜间模式。  
  - **说明**：设置为 `true` 时，跳转页面将启用暗色模式，适合夜间使用，设置为`auto`时将会自动切换亮暗模式，根据系统的亮暗数据进行判断。

- **`appearance.countdowntime`**:  
  - **类型**：`Integer`
  - **默认值**：`4`
  - **描述**：跳转页面倒计时秒数，如果设置为负数则为不自动跳转。  
  - **说明**：该配置项设置了跳转页面的倒计时。设置为负数时，将禁用自动跳转。

- **`debug.enable`**:  
  - **类型**：`Boolean`
  - **默认值**：`false`
  - **描述**：是否启用调试模式，开启后会输出详细的调试信息。  
  - **说明**：当您在调试插件时，启用此项可以输出详细的日志信息，帮助解决问题。

---

### 问题反馈

如果有任何问题，请提 issue 或者联系作者邮箱 01@liushen.fun，或者在网站中进行更加快捷的提问：[https://blog.liushen.fun](https://blog.liushen.fun)
