为 WordPress 开启 HTTP 和 HTTPS 同时访问
博客在一开始的时候,申请了一个 SSL 证书,那时候单纯只是用来后台使用。
因为那时候多说评论插件还不能支持 HTTPS 协议,所以就没全站用上。
其他页面就强制调回到 HTTP 页面,但是这样又不是太好,有证书都用不上。
前段时间多说插件居然支持 HTTPS 了,所以趁着现在有点时间,就把这个内容搞定
实现的内容是,当访问 http://blog.shiniv.com 和 https://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 同时访问 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2014/06/open-http-and-https-in-wordpress/ , 转载请保留本声明!
谢谢博主分享,正在研究这个问题,想把博客转成ssl