qxyhuiyuan 发表于 2022-4-11 08:31:44

[discuzX3.4教程]2022年最新Discuz X3.4全站设置HTTPS教程

版本:Discuz! X3.4 R20220131 UTF-8以及之后
因为最新版本对https加强了优化,不再像之前会出现页面排版等问题,也不需要下载https插件,不需要sql替换http为https,很简单。


方法如下:


第一步:宝塔申请SSL


https://pic.rmb.bdstatic.com/bjh/bd94fe58a0fa8783173562992db11827.png

这里要注意两点:1伪静态要关闭点保护文件的设置,2不要用宝塔的强制https
https://pic.rmb.bdstatic.com/bjh/b1c18c3d0539da7fcbc50f800f75af57.png
这里因为冲突,所有我注释掉了。
#【5】设置保护点开头文件与隐藏文件(与Let's证书申请冲突)
#if ($request_uri ~* (^|/)\..*$) {
#      rewrite ^/(.*)$ https://pic.rmb.bdstatic.com/bjh/bf0581b2b8c39d2f6fbbc46f8e8c7925.png redirect;
#}
之后会生成一个SSL验证文件夹.well-known(最好保留,自动续签可能会用到)

第二步:手动设置跳转https

if ( $scheme != "https" ) {
         return 301 https://$host$request_uri;}
如果post请求的传参服务端收不到,被重定向了变成get请求了,传参就收不到了


于是希望仅重定向get请求,简单的以为用&&符号就可以表示and条件了


if ($scheme != https && $request_method = GET)
{
      return 301 https://$host$request_uri;
}
然后nginx重启失败了,不支持这种写法哦


改造如下:


set $rc ''; #redirect_condition
if ($scheme != "https")
{
    set $rc h; #http
}

if ($request_method = "GET")
{
    set $rc "${rc}g"; #httpget
}

if ($rc = hg) #httpget
{
    return 301 https://$host$request_uri;
}
原理就是设置一个变量$rc,然后两个条件对$rc进行字符串组装,最后判断$rc的值来实现两个条件的and操作
https://pic.rmb.bdstatic.com/bjh/1ed2d9640a6c99ad38c73489f429e4e8.png

第三步:修改后台的URL


以前是分别修改三处文件,现在不需要修改,新版已经优化,但是如果你的主机既不支持$_SERVER[‘HTTPS’] 的方式,也不支持$_SERVER[‘SERVER_PORT’]方法,需使用$_SERVER['HTTP_FROM_HTTPS']进行判断SSL,
那么就需要改三处文件(source/class/discuz/discuz_application.php、uc_server/avatar.php、uc_server/admin.php)

1、后台 >全局 > 站点 URL,改为HTTPS
2、后台 > 站长 > UCenter 设置 > UCenter 访问地址,改为HTTPS
3、UCenter 后台 > 应用管理 > 应用的主 URL,改为HTTPS(新版已经优化了配置https后通信失败的情况,所以不需要修改文件,改过的需要替换新版文件)
这里注意UCenter改了URL后,密钥会自动更改,所有需要复制更改的密钥,替换配置文件config_ucenter.php第15行的密钥。

最后更新UCenter缓存、后台缓存、模版缓存,就可以了。

页: [1]
查看完整版本: [discuzX3.4教程]2022年最新Discuz X3.4全站设置HTTPS教程