Github Pages是一个很好的服务,但是由于某些事件过后,他再也不能被百度抓取,这让很多人很恼火。
首先,我说明下,我的博客在写这篇文章的时候,是测试不会403的。博客有两个网址,带www和不带www两种。由于我不带www的会自动跳转带www,所以我设置的是带www的能被抓取,不带的没管,测试指令如下:
curl -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +https://www.baidu.com/search/spider.html)" https://www.dosk.win/
很多方案,我就不一一说了,但是都不适合我,因为之前的文章中提到,博客的后台编辑器是强依赖Github API的,所以博客代码只能放在github上。但是国内的服务商Coding.Net提供几乎一样的服务(而且速度快咩哈哈),只不过这个编辑器不能被移植过去(她们提供的API同源策略的问题,可以在她们repo的谈论区看到我的issus)。
有一种方案,可行,那就是,两个repo,当Github更新的时候,Coding.Net同步更新,想象很刺激,其实很简单,用一下WebHooks服务就OK了。
这里你需要一个服务器,来接受WebHooks的请求。什么?还要服务器?那我还用GIthub Pages干嘛?科科,别着急,我告诉你,用OpenShift就OK了2333...
怎么做?
新建一个OpenShift应用,Node.js的,然后同步coding和github的项目,更改coding的config地址,加上user:pass@url,使他能够不验证密码就提交,再改改如下代码中关于你自己的配置就OK:
var express = require('express');
var app = express();
var exec = require('child_process').exec;
var fs = require('fs');
var pull = function (func) {
exec('cd github && git pull', function () {
console.log('Pulled...');
func();
});
}
var deploy = function () {
console.log('Starting deploy...');
pull(function () {
exec('rm -rf coding/* && cp -rf github/* coding/', function () {
console.log('Deleted and copied...');
exec('cd coding && git add --all && git commit -m "update" && git push', function () {
console.log('Deploy finished !');
})
});
});
};
app.post('/webhooks', require('body-parser').json(), function (req, res) {
setTimeout(function () {
if (!fs.existsSync('github'))
exec('git clone https://github.com/springhack/springhack.github.io github', function () {
console.log('Github cloned.')
if (!fs.existsSync('coding'))
exec('git clone https://git.coding.net/springhack/springhack.git coding', function () {
console.log('Coding cloned.')
deploy()
});
else
deploy();
});
else
deploy();
}, 0);
res.end('');
});
app.listen(parseInt(process.env.OPENSHIFT_NODEJS_PORT), process.env.OPENSHIFT_NODEJS_IP);
相信你能看懂吧!然后相应的,把地址加到github的webhooks里面,再把CNAME设置为coding的配置,OK,搞定!
我的博客github repo:https://github.com/springhack/springhack.github.io
我的博客coding repo:https://coding.net/u/springhack/p/springhack/git
你可以试试ping看看IP,dosk.win和www.dosk.win是不同的,而且后者能够完美通过curl的测试~