背景

生成的静态博客页面源码中的url被替换为localhost是很偶然发现的,最开始是一个如下的

<link rel="canonical" href="http://localhost:4000/2018/12/09/solve-jekyll-generated-html-replaced-with-localhost-url/">

link标签中的url出现这种情况,搜了一下link canonical结果显示跟搜索引擎有点关联,因为我比较重视SEO就一直绞尽脑汁想解决这个问题,后来在用git diff命令的时候发现了更多被替换的url如下图: 解决部署在vps上的jekyll静态博客中的url被替换为http://localhost:4000

原因

其实原因就在于执行过jekyll serve命令后,jekyll会先build一下,其此时build的时候会将所有的url的开头自动替换为http://localhost:4000,另外jekyll serve命令在运行的过程中Auto-regeneration自动生成默认是开启的,只>要有文件变动,自动生成的html中的url也会自动替换

解决方法

其实很简单,要么control+c停止jekyll serve命令运行,要么不要变动文件,只需要再新建一个终端页面cd到你的jekyll项目根目录下(注意一定要是根目录,否则会在你运行的目录下面又多出来一个_site文件夹哦!),手动执行一下 jekyll build命令即可将url里面http://localhost:4000替换为你的_config.yml配置文件中url参数后面的网址,比如我的配置是url: "https://www.sharpgan.com"

万恶之源

我把.gitignore里面的_site给删除掉了,其实_site文件夹下面生成的静态html是不应该push到仓库里面的,主要是我用的vps只有512MB的小运存,还同时充当番茄服务器, 同时也不想再装ruby环境在vps上面build站点,其实正确的姿势就是应该在vps上build站点,最好是搞个简单的CI+CD工作流的,奈何这样子估计要升级vps,囊中羞涩先不折腾这一套东西了。