为 WordPress 开启 HTTP 和 HTTPS 同时访问

2014年6月23日 分类: Wordpress, 杂谈 (8,025 个脚步)

博客在一开始的时候,申请了一个 SSL 证书,那时候单纯只是用来后台使用。

因为那时候多说评论插件还不能支持 HTTPS 协议,所以就没全站用上。

其他页面就强制调回到 HTTP 页面,但是这样又不是太好,有证书都用不上。

前段时间多说插件居然支持 HTTPS 了,所以趁着现在有点时间,就把这个内容搞定

实现的内容是,当访问 http://blog.shiniv.comhttps://blog.shiniv.com 都能正常访问,不会强调到某一个协议上,当然了,访问后台什么的,还是用 HTTPS 的好。

首先我们先在 wp-config.php 中加入一下内容,以便 WordPress 的链接能适配当前域名


$site_url = (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT']) ? "https://" : "http://") . "blog.shiniv.com";
define('WP_SITEURL', $site_url);
define('WP_HOME', $site_url);
define("WP_CONTENT_URL", $site_url . "/wp-content");

/*  强制使用SSL进行登录和后台管理  */
define('FORCE_SSL_LOGIN', false);
define('FORCE_SSL_ADMIN', true);

然后配置NGINX,我用的 Tengine,配置基本都一样,HTTP的按照以前的配置就好了


ssl                  on;
ssl_certificate      /any path/your crt/blog.shiniv.com.crt;
ssl_certificate_key  /any path/your crt/shiniv.com.key;
ssl_session_timeout  5m;
add_header           Front-End-Https on;

如果网站开启了伪静态的话,也需要将伪静态的内容加入到配置文件中去


if (!-e $request_filename) {
    rewrite . /index.php last;
}
if (!-f $request_filename){
    rewrite (.) /index.php;
}

还有一点需要注意的,如果你在访问HTTP地址的时候,发现除了网站的地址是 HTTP ,其他都是 HTTPS 的话,就要关掉 NGINX 的 HTTPS 配置


fastcgi_param  HTTPS              off;

或者你可以改Wordpress 的代码,具体代码在/wp-include/functions.php中。

查找is_ssl() 函数

替换成以下内容


function is_ssl() {
	if ( isset($_SERVER['HTTPS']) ) {
		if ( 'on' == strtolower($_SERVER['HTTPS']) )
			return true;
		if ( '1' == $_SERVER['HTTPS'] )
			return true;
	} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
		return true;
	}
	return false;
}

保存即可

PS 用了 CDN 的话记得使用支持 HTTPS 协议的 CDN,要不然会出问题的哦

为 WordPress 开启 HTTP 和 HTTPS 同时访问 【声明】本文 为 WordPress 开启 HTTP 和 HTTPS 同时访问 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2014/06/open-http-and-https-in-wordpress/ , 转载请保留本声明!

标签: , , ,
13 条评论
  • 谢谢博主分享,正在研究这个问题,想把博客转成ssl

  • 然而现在提示:此页面不能正确地重定向。
    博主能不能把QQ发我邮箱,我加下你,希望占用博主几分钟时间。
    我用的是WDCP控制面板,可以比较方便的编辑和修改。。。。

  • 博主的这篇文章我测试了,效果非常好,然而我也发现了许多问题。。。
    问题一:就是里面的页面还是原来的http://页面,内容页面没有变
    问题二:最关键也最头疼的,admin后台打不开了。
    希望博主回复下

    • 第一个有可能是因为你现在用的模板的问题,你可以试一下这个
      function replaceUrl($html) {
      if(is_ssl()) {
      $html = str_ireplace(‘http://siteurl.com’, ‘https://siteurl.com’, $html);
      }
      return $html;
      }

      add_filter(‘the_content’, ‘replaceUrl’, 1);

      至于后台的话,你试一下将FORCE_SSL_LOGIN、FORCE_SSL_ADMIN这两个都设置成 false 试一下

  • 请教博主一个问题,开启https后,博客logo图片不显示了,如何让它显示出来?我试着在主题中将logo的那个地址替换,好像还是不显示,另外除了logo,文章的图片也不显示了,我试着在数据库中将所有http替换成https,图片还是不显示,是不是还需要做什么设置?

    • 你复制logo的地址 然后改成https 看能不能访问?
      给个地址我看下

  • 是怎么解决模板无法显示问题的??这个东西纠结了好久

  • 请求的头像全都是http的【【

    • 没办法 多说这个坑货不输出HTTPS头像

  • 我用的插件wordpress https

    • 我现在基本是能不能插件就不用插件~

你必须要启用 Javascript