生成永久链接(permalink) | hexo

本文介绍如何使用grunt-rewrite插件配合hash算法为Hexo博客生成永久文章链接,确保即便更改文章文件名,链接仍保持不变。

hexo默认的文章链接形式为domain/year/month/day/postname,当我们把文章源文件名改掉之后,链接也会改变,这很不友好。
这里介绍一种方法来生成永久链接。使用的是node.js常用的自动构建工具grunt.

步骤为:

  1. 文章的Front-matter中加入一个abbrlink 字段
    image

  2. 使用grunt的插件grunt-rewrite自动填充abbrlink的值
    编辑 Gruntfile.js

module.exports = function(grunt) {

  grunt.initConfig({

    rewrite: {
      abbrlink: {
        src: 'source/_posts/**/*.md',
        editor: function(contents, filepath){
          const crypto = require('crypto');
          const hash = crypto.createHash('sha256');

          hash.update(contents);
          var hashValue = hash.digest('hex');

          return contents.replace(/@@abbrlink/g, hashValue.substring(0, 16));
        }
      },
    },
  });

  grunt.loadNpmTasks('grunt-rewrite');
};

这表示,插件到source/_posts/ 下读取所有的.md文件,把文件中的@@abbrlink替换成文件内容的hash值。

  1. 编辑站点配置文件_config.ymlpermalink
permalink: posts/:abbrlink.html

最后,当我们运行grunt rewrite后,@@abbrlink会被替换成一个16位的hash值。
链接地址变成blog.wangjinle.com/posts/916d83182e15eeb1.html这种样式,只要不去改动这个hash值,链接地址不会变。

<think>我们正在讨论的问题是:修改Hexo的_config.yml后是否需要重启Hexo服务才能生效。根据Hexo的工作原理,当我们修改了根目录下的_config.yml(站点配置文件)后,Hexo服务并不会自动重新加载这个配置文件。因此,通常需要重启服务(即停止当前运行的Hexo服务器,然后重新生成并启动)才能使更改生效。但是,我们需要注意以下几点:1.对于某些配置项,可能不需要重启整个服务,但需要重新生成静态文件(即执行`hexogenerate`)。例如,修改了博客标题、描述等,这些内容在生成静态页面时会被使用,因此重新生成即可。2.然而,如果修改的配置项涉及服务器设置(例如端口号、IP绑定等)或者影响生成过程的配置(如文件路径、分页设置等),则必须重启服务。3.另外,在开发过程中,我们通常使用`hexoserver`启动本地服务器,这个服务器在运行过程中不会监控_config.yml的更改(尽管它会监控文章文件的更改)。所以,修改_config.yml后,需要手动重启服务。因此,最佳实践是:每次修改_config.yml后,执行以下步骤:hexoclean#可选,但有时为了清除缓存,建议执行hexogenerate#重新生成静态文件hexoserver#重新启动服务器或者,我们可以先停止服务器(Ctrl+C),然后重新运行`hexoserver`。因为`hexoserver`命令实际上已经包含了生成静态文件的过程(但为了确保没有缓存问题,建议先clean再generate)。引用[1]中提到了_config.yml中的一些配置项,比如日期格式、分页设置等,这些配置在生成静态文件时被使用,因此修改后需要重新生成静态文件。而如果修改了服务器相关的配置(比如端口号),则必须重启服务器才能生效。另外,引用[2]提到了多语种网站的配置,修改了`new_post_name`和`permalink`,这些配置同样在生成静态文件时使用,所以需要重新生成。总结:修改_config.yml后,通常需要重新生成静态文件(hexogenerate)并重启服务器(hexoserver)才能使更改生效。但是,如果我们只是修改了主题目录下的_config.yml(主题配置文件),那么可能只需要重新生成静态文件,而不需要重启服务器?注意,主题配置文件的修改,有时可以通过刷新浏览器看到变化(因为主题文件可能被重新读取),但为了确保,建议还是重新生成。不过,我们当前的问题只针对根目录下的_config.yml(站点配置文件)。因此,回答用户的问题:是的,每次修改Hexo的站点配置文件(_config.yml)后,都需要重启Hexo服务(即停止并重新运行`hexoserver`)以使更改生效。同时,建议在重启服务之前重新生成静态文件(执行`hexogenerate`),或者直接使用`hexoserver`(它会自动生成,但有时为了清除缓存,先执行`hexoclean`和`hexogenerate`更可靠)。注意:在运行`hexoserver`时,它默认会监视文件变动并自动重新生成(但通常不监视_config.yml的变动),所以对于_config.yml的修改,手动重启是必要的。为了更严谨,我们可以参考Hexo官方文档,但根据社区经验,重启服务是普遍做法。生成相关问题:1.修改Hexo主题配置文件后需要重启服务吗?2.如何让Hexo服务自动重载配置文件的更改?3.Hexo的配置文件中哪些修改不需要重启?</think>### Hexo 修改 _config.yml 后是否需要重启服务? 是的,**每次修改 Hexo 根目录下的 `_config.yml` 文件后,必须重启 Hexo 服务才能使更改生效**。原因如下: 1. **配置文件加载机制** Hexo 仅在启动时读取根目录的 `_config.yml` 文件。修改后若不重启: - 服务器进程仍使用旧配置运行 - 动态内容(如分页设置 `per_page`[^1])无法热更新 - 主题切换 `theme` 等核心配置无法实时应用 2. **标准操作流程** 修改后需按顺序执行: ```bash hexo clean # 清除缓存(关键步骤) hexo generate # 重新生成静态文件 hexo server # 重启服务 ``` > 测试验证:修改 `date_format` 或 `per_page` 后不重启,主页时间格式和分页数均不会更新[^1]。 3. **例外情况** 以下修改可能无需重启,但仍建议执行完整流程: - 主题目录下的 `_config.yml`(部分主题支持热重载) - 文章 `.md` 文件(可通过浏览器刷新生效) - 静态资源(如图片/CSS,但需清除浏览器缓存) 4. **配置层级关系** | 配置文件位置 | 是否需要重启 | 生效范围 | |----------------------|--------------|------------------------| | 根目录 `_config.yml` | **必须** | 全局配置(如分页/部署)| | 主题目录 `_config.yml` | 可选 | 主题相关设置 | ### 最佳实践建议 1. 每次修改后执行 `hexo clean && hexo g && hexo s` 2. 多语言配置时(如 `permalink: :lang/:title/`[^2])需额外检查路由生成 3. 使用 `hexo server --debug` 查看实时加载日志 --- ### 相关问题 1. **Hexo 修改主题配置文件后需要重启服务吗?** 2. **如何实现 Hexo 配置的热重载?** 3. **Hexo 分页设置不生效有哪些原因?**[^1] 4. **多语言 Hexo 博客的永久链接如何配置?**[^2] [^1]: 涉及分页、日期格式等核心配置需重启生效 [^2]: 多语言配置需同步检查路由生成逻辑
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值