这两天接入文章页百度分享时发现本地能够显示分享按钮,可是发布到线上以后发现分享按钮不会展现。打开浏览器调试工具发现,HTTPS下的百度分享资源未加载,起初觉得是HTTPS站点下面使用的是HTTP协议的连接,可是查看源代码发现是自适应协议的, 因此问题应该是处在百度这里。php
打开https://bdimg.share.baidu.com/static/api/js/share.js
发现浏览器提示NET::ERR_CERT_COMMON_NAME_INVALID
,也就是访问的域名和证书配置的域名不匹配
,证书的域名是*.baidu.com
,访问的域名是bdimg.share.baidu.com
,泛域名是不能够跨级使用的。git
虽然是百度的问题,可是咱也不可能要他去改这个分享,因此只能本身来处理了。github
将百度分享的资源打包下来进行部署api
百度分享相关JS我已经分享到github了,一键直达仓库浏览器
文件目录以下:服务器
|--static(百度分享资源目录) |--DirectorySync.php |--FilterScanner.php |--index.php
DirectorySync.phphexo
/** * 目录同步器 * Class DirectorySync * @package sync * @author xialeistudio * @date 2019-07-11 */ class DirectorySync { private $accessKey; private $secretKey; private $bucket; /** * @var Auth */ private $auth; /** * DirectorySync constructor. * @param $accessKey * @param $secretKey * @param $bucket */ public function __construct($accessKey, $secretKey, $bucket) { $this->accessKey = $accessKey; $this->secretKey = $secretKey; $this->bucket = $bucket; $this->auth = new Auth($accessKey, $secretKey); } /** * 同步目录 * ```php * [ * '目录名称' => '七牛keyPrefix' * ] * ``` * @param array $list * @throws \Exception * @author xialeistudio * @date 2019-07-11 */ public function sync(array $list) { $uploader = new UploadManager(); $token = $this->auth->uploadToken($this->bucket); foreach ($list as $path => $keyPrefix) { $scanner = new FilterScanner($path); foreach ($scanner as $filename) { printf("uploading %s \n", $filename); /** @var Error $error */ list($ret, $error) = $uploader->putFile($token, $keyPrefix . $filename, $filename); if (!empty($error)) { printf("uploading %s error: %s\n", $filename, $error->message()); } } } } }
FilterScanner.phpapp
/** * 文件扫描器 * Class FilterScanner * @package sync * @author xialeistudio * @date 2019-07-11 */ class FilterScanner extends FilterIterator { /** * FilterScanner constructor. * @param $path */ public function __construct($path) { parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path))); } /** * Check whether the current element of the iterator is acceptable * @link https://php.net/manual/en/filteriterator.accept.php * @return bool true if the current element is acceptable, otherwise false. * @since 5.1.0 */ public function accept() { return substr($this->current(), -1, 1) != '.' && substr($this->current(), -2, 2) != '..'; } }
index.phpdom
$sync = new DirectorySync(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/"}}
完事以后执行php index.php
上传到七牛,此时就能够随意部署了~。
将以往使用bdimg.share.baidu.com/static/api/js/share.js
的地方换成//static.ddhigh.com/static/api/js/share.js
便可,其余资源会自动加载。
本站的CDN域名作了防盗链处理,各位若是直接用个人share.js连接是会有问题的
上传到七牛这个步骤完成以后,搜索文件baidushare.swig
,找到最下面的以下代码:
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='//bdimg.share.baidu.com/static/api/js/share.js?cdnversion='+~(-new Date()/36e5)];
将连接替换为本身的CDN连接,我这边替换后的结果以下:
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='//static.ddhigh.com/static/api/js/share.js?cdnversion='+~(-new Date()/36e5)];
更多精彩内容尽在个人博客天天进步一点点