WordPress整站开启HTTPS协议,让站内链接支持SSL证书

张子凡 WordPress建站 2016-12-23 16:34:58 阅读(11096) 评论(25)

最近这些天子凡一直在忙于折腾泪雪博客及博客的搬家,再到Fanly主题的2.0版本优化升级,同时泪雪博客也接入SSL证书,支持HTTPS协议访问了,所以在这里子凡想要分享一个关于WordPress网站支持SSL的问题,当然WordPress程序是100%支持SSL的,但是不排除我们网站的主题模板以及站内链接都是支持HTTPS协议的。

WordPress整站开启HTTPS协议,让站内链接支持SSL证书

网上也有非常多的各式各样的WordPress开启https访问的方法,这里子凡就简单的给大家分享两种方法吧!

方法一、传统方式将WordPress开启整站HTTPS协议

1.登录和后台强制开启SSL,可以通过修改wp-config.php文件,直接在文件末尾加入以下两行代码:

1
2
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

或者在确认WordPress站点已经开启https协议并可以通过https访问,那么可以直接登陆后台,通过“设置”中“常规”里面把“WordPress地址(URL)”、“站点地址(URL)”两个地址的http修改为https并保存。

WordPress站点修改为HTTPS协议

2.然后还需要确定的就是通过“设置”中“多媒体”菜单把“文件的完整URL地址”也改为https协议,如果文件的完整URL地址之前是缺省的,那么也就可以不用修改。

WordPress多媒体附件开启https协议

3.同时为了保证WordPress站点之前添加的各个链接或者多媒体文件把http协议改成https协议,我们还需要通过数据库SQL查询执行一条替换命令,代码如下:

1
update wp_posts set post_content = replace(post_content, 'http://zhangzifan.com','https://zhangzifan.com');

以上代码以泪雪博客地址为例,使用时请按照自己数据库表名(wp_posts)和网站域名修改后在执行即可。

方法二、代码方式让WordPress开启整站HTTPS协议

我们都知道,我们如果使用了WordPress的多媒体上传和插入图片附件的时候,附件都被WordPress标记为了绝对链接,一般需要修改数据库,但这种方法子凡是非常不推荐的,对于不是非常熟悉数据库的同学们估计网站直接被毁也是可能的,所以子凡在这里推荐一种自己正在使用和即将在Fanly主题2.0支持的一种方法。

以下代码已于2017/2/5更新,不仅仅支持WordPress站内链接支持HTTPS协议,支持多域名的多媒体附件HTTPS协议,同时也新增方法二相对链接功能支持。

老规矩,编辑当前主题下的 functions.php 文件,加入以下代码:

代码一:HTTPS绝对链接替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//WordPress SSL at 2016/12/29 update
add_filter('get_header', 'fanly_ssl');
function fanly_ssl(){
	if( is_ssl() ){
		function fanly_ssl_main ($content){
			$siteurl = get_option('siteurl');
			$upload_dir = wp_upload_dir();
			$content = str_replace( 'http:'.strstr($siteurl, '//'), 'https:'.strstr($siteurl, '//'), $content);
			$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), 'https:'.strstr($upload_dir['baseurl'], '//'), $content);
			return $content;
		}
		ob_start("fanly_ssl_main");
	}
}

代码二:HTTPS相对链接替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//WordPress SSL
add_filter('get_header', 'fanly_ssl');
function fanly_ssl(){
	if( is_ssl() ){
		function fanly_ssl_main ($content){
			$siteurl = get_option('siteurl');
			$upload_dir = wp_upload_dir();
			$content = str_replace( 'http:'.strstr($siteurl, '//'), strstr($siteurl, '//'), $content);
			$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), strstr($upload_dir['baseurl'], '//'), $content);
			return $content;
		}
		ob_start("fanly_ssl_main");
	}
}

以上就为大家提供了两种实现的方式,方法一主要是通过直接修改WordPress的配置以及将之前的http协议直接通过数据库执行替换命令修改为https协议,这样算是一个一劳永逸的方式,同样网站以后也将必须使用https协议才能访问,如果哪天服务器关闭了SSL证书,那么很遗憾的告诉你,你还需要使用方法一中的方式反过来操作,如果你非常确定网站以后都会使用https协议,那么推荐使用方法一。

如果你是一个喜欢折腾,有太多不确定因素,那么可以使用子凡提供的方法二,同样还提供了两种代码解决方式都可以完美支持HTTPS协议,如果你的站点需要支持HTTP和HTTPS双协议共存,那么就选择使用代码二的相对链接替换方法吧,反之子凡则推荐实用代码一的绝对链接替换方法。

到这里你的WordPress站内链接都将使用HPPTS协议,非本站点的链接保持原样,比如友情链接和站外图片链接等。

写在最后:如果你的WordPress站点开启了HTTPS,如果在360浏览器、猎豹浏览器等打开地址栏前未显示绿色小锁图标,那么说明你的网站加载了非SSL引入的资源,建议大家仔细排查。

最后在告诉Fanly主题用户一个好消息,Fanly 2.0将支持SSL,敬请期待咯!

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/wordpress-ssl-link.html

发表评论

  1. 魏星博客
    1楼
    魏星博客 4周前 (08-25)

    用了此方法出现两个问题,一、首页页面无CSS样式,二、后台打不开,显示“服务器将该地址循环重定向”,最后前后台都没有任何内容了,直接白屏!

    • 张子凡
      回复
      张子凡 4周前 (08-29)
      回复 @魏星博客 :如果出现这个情况请不要使用第二种方法,因为第二种方法每次页面访问都需要占用服务器资源,所以会出现页面空白的情况,你可以直接通过WordPress后台将地址修改为https,媒体文件地址可能也需要手动改一下,并且使用SQL替换语句将文章内容替换为https域名地址即可,如果主题中的链接是绝对地址,可能也需要改一下。
  2. bokit
    2楼
    bokit 4个月前 (05-17)

    还是有点蒙蒙的,,,我的网站刚建立的就提示非安全链接。估计就是你说的这个事情吧。我再了解了解再请教一二。

  3. 立悟博客
    3楼
    立悟博客 4个月前 (05-15)

    方法2有效,谢谢

    • 张子凡
      回复
      张子凡 4个月前 (05-16)
      回复 @立悟博客 :嗯嗯,好的
  4. 青衫
    4楼
    青衫 5个月前 (04-20)

    我用方法一后,网站前台全部错位,后台直接进不去,一进就显示,服务器将该地址循环重定向,我又进数据库,把地址从新改回http,依然进不去,感觉已经无解了,心好累

    • 张子凡
      回复
      张子凡 5个月前 (04-26)
      回复 @青衫 :建议用后面的方法
    • 魏星博客
      回复
      魏星博客 4周前 (08-25)
      回复 @青衫 :我的也是这种情况,最终问题解决了吗,怎么解决的?
  5. 阿瑾
    5楼
    阿瑾 6个月前 (04-07)

    这个我用了还是显示我有不安全的连接 我f12查 图片还是http的

    • 张子凡
      回复
      张子凡 6个月前 (04-09)
      回复 @阿瑾 :这个只对WordPress上传的附件路径生效,其它外链就没办法了
  6. 流年哔哔
    6楼
    流年哔哔 6个月前 (04-03)

    用了代码,网站打开空白,不知道怎么回事,请教一下?

    • 张子凡
      回复
      张子凡 6个月前 (04-04)
      回复 @流年哔哔 :建议用方法二中的相对路径的方式试试
  7. 诗梦
    7楼
    诗梦 6个月前 (03-12)

    诗梦博客http://www.mom1.cn

    • 张子凡
      回复
      张子凡 6个月前 (03-12)
      回复 @诗梦 :你站点并不是用的完整URL?或者并没有设置,代码根本就没有获取到你的站点URL
  8. 诗梦
    8楼
    诗梦 7个月前 (03-10)

    姐姐我使用你的相对链接,然后全站ssl友链也是全部是ssl的了

    • 张子凡
      回复
      张子凡 7个月前 (03-11)
      回复 @诗梦 :通过你反馈的问题我再次测试过代码,是没有任何问题的,相对链接和绝对链接均不会影响站外链接,也就是非当前站点域名是不会被修改的,请检查你的网站是否存在功能相似的代码或插件等功能在测试,同样也可以使用我提供的第一种方法
      • 诗梦
        回复
        诗梦 6个月前 (03-11)
        回复 @张子凡 :文章那里的链接带s不信你看我博客
        • 张子凡
          回复
          张子凡 6个月前 (03-12)
          回复 @诗梦 :我怎么看你博客?
          • 诗梦
            回复
            诗梦 6个月前 (03-12)
            回复 @张子凡 :能加QQ吗
            • 张子凡
              回复
              张子凡 6个月前 (03-12)
              回复 @诗梦 :可以的,592651505
      • 诗梦
        回复
        诗梦 6个月前 (03-12)
        回复 @张子凡 :文章内容的链接和友链的都带https://了
  9. 林侦通
    9楼
    林侦通 8个月前 (02-05)

    感谢分享,我的博客已经用上,非常实用!!!十分感谢。。

    • 张子凡
      回复
      张子凡 8个月前 (02-08)
      回复 @林侦通 :好的,谢谢支持
  10. 抛丸机网
    10楼
    抛丸机网 9个月前 (12-23)

    就改一下这个就好了吗

    • 张子凡
      回复
      张子凡 9个月前 (12-24)
      回复 @抛丸机网 :首先服务器上你的先配置安装好SSL证书才行