网站开启https访问的好处有很多啊。比如搜索引擎会青睐,浏览器,比如火狐,谷歌会出现一个绿色的锁。非https网站谷歌直接会提示不安全。对用户体验来说大打折扣。
在尝试给discuz网站开通https访问的时候,出现了很多问题。这里大概总结下处理步骤。避免以后出现同样的问题。
首先,nginx开启https
server{ listen 443 ssl; ssl_certificate /usr/local/nginx/cert/xxx.com.pem; ssl_certificate_key /usr/local/nginx/cert/xxx.com.key; .... }
重启nginx后,访问
https://www.xxx.com
发现首页没有加载任何css,样式是乱的。打开firebug一开,原来里面的js,css的访问路径都是http,出现了mixed blocked错误。于是,查找网上的解决方案。解决方案很多,但是并不都一样。我现在汇总一下,彻底解决所有问题。
(1)修改 /source/class/discuz/discuz_application.php
找到
$_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;改为
$_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
(2)修改/uc_server/avatar.php
找到:
define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
替换为:
define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
(3)修改/config/config_ucenter.php
找到:
define('UC_API', 'http://www.xxx.com/uc_server');
改为:
define('UC_API', 'https://www.xxx.com/uc_server');
(4)修改/template/default/common/header.htm
查找: http:// 全部替换为: https://
(5)UCenter 后台 > 应用管理 > 应用的主 URL,改为HTTPS
(6)查找一些图片,例如版本的图标,如果是以前直接用http开头的地址的,需要在数据库中修改。
(7)后台界面-风格管理,点击更新 CSS 缓存,更新缓存,完成!
到此,彻底解决discuz 设置https访问的问题。