让PHPCMS 9.6.3支持https的方法

方法说明:

1.只是让网站前台在https运行, 而后台仍在http运行

2.权定前台页面都在 m=content 下, 只是让m=content下的页面在https下访问

3.可能不适用于用js拼接了本站域名的一些情况

4.只适合展示站的情况, 不适合有表单提交数据的情况

Step1 网站域名以www.domain.com为例, 首先要配置好https,达成这种状态:

用https://www.domain.com 和 http://www.domain.com都可以访问网站, 具体方法略过

下面的配置是为了让网站在浏览器显示为”安全”; 因为当https的页面中, 调用了http的资源, 那么它在浏览器不会显示为安全.

Step2 在phpcms的根目录建立文件router.php, 存入以下代码

<?php
//设定1: http网址
$http = 'http://www.domain.com';//改成你的域名

//设定2: https网址
$https = 'https://www.domain.com';//改成你的域名

//从$http得到路由网址
$router = "$http/index.php?inrouter=1";

//读取所有参数
$params = $_SERVER['QUERY_STRING'];

//https下的后台跳至http下的后台
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' && $params == 'm=admin') {
    header("Location: $http/index.php?m=admin");
    die;
}

/** 参数解读 开始 
 *    这些条件是为判断是否为前台页面
 */

//条件1: 是前台页面, 即m=contents的
$c1 = strstr($params, 'm=content');

//条件2: 不在路由器中
$c2 = !strstr($params, 'inrouter=1');

//条件3: 是首页
$c3 = strlen($params) == 0;

//条件综合
$condition = ($c1 && $c2) || $c3;

/**参数解读 结束*/

if ($condition) {
    $uri = "$router&$params";

    $html = '';
    $html .= '<meta charset="utf-8">';//防止乱码

    //读取内容, 并把本域名下的 http:// 改为 https://
    $html .= file_get_contents($uri);
    $html = str_replace($http, $https, $html);
    /**
     * 本文的设定, 并未包含网站引用了其他域名下的资源的情况
     * 要知道https网址下, 有很多http内容不能显示, 比如css
     * 要把引用内容的网址由http改为https, 可以在此处添加代码
     */

    //显示内容
    echo $html;
    die;
}

Step3 备份PHPCMS根目录下index.php, 并编辑它, 可以把它的前两行变成这样

<?php
include 'router.php';//加载路由文件

现在就可以了

ECS利用CDN配置为https

目前, 使用阿里云虚拟主机, 域名通过A记录有可直接配置为https的;

而阿里云的ECS配置https,可以利用阿里云的CDN,方法大致如下:
1.将域名配置为阿里云CDN,CDN的源站可指向可访问的服务器IP
2.在阿里云SSL证书为域名申请证书,目前有symantec的免费证书,有效期大约1年
3.将域名设置CNAME, 指向CDN所提供的地址
4.在CDN的HTTPS配置里, 配置HTTP -> HTTPS强制跳转

完成了. 但是如果跟域名有MX记录,如企业邮箱; 因为MX记录与CNAME会发生冲突.所以在这里, 如果根域名配置了企业邮箱,可能不再支持根域名配置为https.

以此方法,不用在服务器上进行证书方面的配置,只需要服务器提供一个可读的网址.