这两天访问文章页面百度分享,发现本地可以显示分享按钮,但是发布到网上后,发现分享按钮不会了被显示。打开浏览器调试工具,发现HTTPS下的百度共享资源加载不出来。一开始以为是HTTPS站点下的链接使用的是HTTP协议,后来查看源码发现是自适应协议,所以问题应该出在百度了。打开https://bdimg.share.baidu.com/static/api/js/share.js,发现浏览器提示NET::ERR_CERT_COMMON_NAME_INVALID,即访问的域名与证书中配置的域名不匹配,证书域名为*.baidu.com,访问的域名为bdimg.share.baidu.com,不能跨级使用通用域名。虽然是百度的问题,但我们也不可能要求他改这个分享,只能自己处理了。可能的解决方案全站使用HTTP,放弃这个方案(现在是9012,免费证书很多,基本都是HTTPS站点)将百度分享的资源打包部署到自己的服务器上(成本低,容易上手)迁移,但是服务器带宽是个问题)部署到CDN,本文以七牛为例资源路径百度分享相关JS我已经分享到github,一键直达仓库处理流程将百度分享的资源解压到本地使用PHP遍历目录上传到七牛(本文使用SPL进行文件夹遍历)替换百度共享JS路径使用PHP变量目录上传到七牛文件目录如下:|--static(百度共享资源目录)|--DirectorySync.php|--FilterScanner.php|--index.phpDirectorySync.php/***DirectorySynchronizer*ClassDirectorySync*@packagesync*@authorxialeistudio*@date2019-07-11*/classDirectorySync{private$accessKey;私人$秘钥;私人$桶;/***@varAuth*/private$auth;/***DirectorySync构造函数。*@param$accessKey*@param$secretKey*@param$bucket*/publicfunction__construct($accessKey,$secretKey,$bucket){$this->accessKey=$accessKey;$this->secretKey=$secretKey;$this->桶=$桶;$this->auth=newAuth($accessKey,$secretKey);}/***同步目录*```php*[*'目录名'=>'七牛keyPrefix'*]*```*@paramarray$list*@throws\Exception*@authorxialestudio*@date2019-07-11*/publicfunctionsync(array$list){$uploader=新上传管理器();$token=$this->auth->uploadToken($this->bucket);foreach($listas$path=>$keyPrefix){$scanner=newFilterScanner($path);}foreach($scanneras$filename){printf("正在上传%s\n",$filename);/**@var错误$error*/list($ret,$error)=$uploader->putFile($token,$keyPrefix.$filename,$filename);if(!empty($error)){printf("上传%s错误:%s\n",$filename,$error->message());}}}}}FilterScanner.php/***文件扫描器*ClassFilterScanner*@packagesync*@authorxialeistudio*@date2019-07-11*/classFilterScannerextendsFilterIterator{/***FilterScanner构造函数。*@param$path*/publicfunction__construct($path){parent::__construct(newRecursiveIteratorIterator(newRecursiveDirectoryIterator($path)));}/***检查迭代器的当前元素是否可以接受*@linkhttps://php.net/manual/en/filteriterator.accept.php*@returnbool如果当前元素可以接受则为真,否则为假。*@since5.1.0*/publicfunctionaccept(){returnsubstr($this->current(),-1,1)!='.'&&substr($this->current(),-2,2)!='..';}}index.php$sync=newDirectorySync(ACCESS_KEY,SECRET_KEY,BUCKET);$sync->sync(['static'=>'']);上传前需要修改百度分享js相关的域名打开static/api/js/share.js,搜索如下代码:jscfg:{domain:{staticUrl:"/"}}将staticUrl改为七牛的域名,本站使用static.ddhigh.com,所以修改后的代码如下:jscfg:{domain:{staticUrl:"//static.ddhigh.com/"}}完成后执行phpindex.php即可上传到七牛,你可以随意部署~。部署到应用中,将之前使用bdimg.share.baidu.com/static/api/js/share.js的地方替换为//static.ddhigh.com/static/api/js/share.js,其他资源将自动加载。本站CDN域名经过防盗链处理。如果直接使用我的share.js链接,就会有问题。HexoNext百度分享额外处理上传至七牛。这一步完成后,搜索文件baidushare.swig,找到最下面的代码如下:with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='//bdimg.share.baidu.com/static/api/js/share.js?cdnversion='+~(-newDate()/36e5)];将链接替换为您自己的CDN链接。我替换后的结果如下:with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='//static.ddhigh.com/static/api/js/share.js?cdnversion='+~(-newDate()/36e5)];更多精彩内容在我的博客每天进步一点点
