当前位置:网站首页 >  攻略

PHPCMS开启HTTPS后报错问题完整修复实操指南

时间:2026年05月23日 17:24:13 来源:易频IT社区

前言

PHPCMS作为老牌CMS系统,默认设计并未完全兼容HTTPS环境。在生产环境开启SSL证书后,常会出现“重定向次数过多”、“资源加载失败(混合内容)”或“后台无法登录”等报错。本文将提供一套完整的修复方案,涵盖服务器配置、程序代码修改及数据库替换,确保全站无缝切换至HTTPS。

第一步:Web服务器强制HTTPS跳转配置

在修改PHPCMS代码前,必须确保服务器层面已强制将HTTP请求跳转至HTTPS,否则会导致死循环。请根据你的Web服务器环境选择对应配置。

Nginx环境配置

打开Nginx配置文件(通常位于/usr/local/nginx/conf/vhost/你的域名.conf),修改监听80端口的server块,增加跳转规则,并确保443端口配置正确。以下是完整配置代码:

```nginx server { listen 80; server_name yourdomain.com; 强制跳转HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name yourdomain.com; 证书路径(请替换为你的实际路径) ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; SSL优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; root /www/wwwroot/yourdomain.com; index index.php index.html index.htm; PHPCMS伪静态规则 rewrite ^(.)show-([0-9]+)-([0-9]+)\.html$ $1/show.php?itemid=$2&page=$3; rewrite ^(.)list-([0-9]+)-([0-9]+)\.html$ $1/list.php?catid=$2&page=$3; rewrite ^(.)list-([0-9]+)\.html$ $1/list.php?catid=$2; if (!-e $request_filename) { rewrite ^(.)$ /index.php last; } location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } } ```

Apache环境配置

在网站根目录下的.htaccess文件中添加以下规则。如果文件不存在,请新建一个:

```apache RewriteEngine On 强制HTTPS跳转 RewriteCond %{HTTPS} off RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] PHPCMS伪静态规则 RewriteRule ^(.)show-([0-9]+)-([0-9]+)\.html$ $1/show.php?itemid=$2&page=$3 RewriteRule ^(.)list-([0-9]+)-([0-9]+)\.html$ $1/list.php?catid=$2&page=$3 RewriteRule ^(.)list-([0-9]+)\.html$ $1/list.php?catid=$2 ``>

配置完成后,必须重启Web服务使配置生效。Nginx执行service nginx restart,Apache执行service httpd restart

第二步:修改PHPCMS全局配置文件

PHPCMS的核心配置文件决定了系统获取的域名协议。如果此处不修改,后台生成的URL依然是HTTP,导致混合内容报错。

修改caches/configs/system.php

使用编辑器打开文件caches/configs/system.php,找到以下配置项进行修改:

  • 找到 'site_url',将其值修改为HTTPS开头的域名。
  • 找到 'https',将其值修改为 1

修改后的代码片段如下:

```php 'https://yourdomain.com/', 'site_domain' => 'yourdomain.com', 'https' => 1, // 开启HTTPS标识 // ...其他配置... ); ?> ```

第三步:修复系统HTTPS判断逻辑(核心步骤)

这是解决“重定向次数过多”或“后台登录后跳转回首页”的关键。PHPCMS在某些环境下无法正确识别反向代理或负载均衡后的HTTPS状态,需要手动修复代码。

修改phpcms/base.php

PHPCMS开启HTTPS后报错问题完整修复实操指南

打开文件phpcms/base.php,找到 define('APP_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR); 这行代码,在它下面添加如下代码:

```php // 强制开启HTTPS支持 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; } ```

修改phpcms/modules/admin/classes/admin.class.php

打开文件phpcms/modules/admin/classes/admin.class.php,找到 public function __construct() 构造函数。在函数内部查找登录检查逻辑,确保跳转URL使用HTTPS。建议直接搜索 showmessage 相关的跳转代码,或者在该文件顶部添加如下代码统一处理:

```php // 修复后台登录跳转协议问题 if (defined('IN_ADMIN') && !defined('HTML')) { if (pc_base::load_config('system', 'https')) { $_SERVER['HTTPS'] = 'on'; } } ``>

第四步:数据库内容批量替换

之前发布文章和内容中存储的图片链接、附件链接可能都是HTTP协议,需要进入数据库进行批量替换。

执行SQL替换命令

进入phpMyAdmin或使用命令行连接数据库,选择PHPCMS使用的数据库,执行以下SQL语句(请将前缀 v9_ 替换为你实际安装时的表前缀,将 yourdomain.com 替换为你的域名):

```sql -- 替换内容表中的图片及链接地址 UPDATE `v9_page` SET `data` = REPLACE(`data`, 'http://yourdomain.com', 'https://yourdomain.com'); -- 替换标题表中的缩略图(如果有存储绝对路径) UPDATE `v9_news` SET `thumb` = REPLACE(`thumb`, 'http://yourdomain.com', 'https://yourdomain.com'); UPDATE `v9_picture` SET `thumb` = REPLACE(`thumb`, 'http://yourdomain.com', 'https://yourdomain.com'); UPDATE `v9_download` SET `thumb` = REPLACE(`thumb`, 'http://yourdomain.com', 'https://yourdomain.com'); -- 替换内容详情表中的正文内容 UPDATE `v9_news_data` SET `content` = REPLACE(`content`, 'http://yourdomain.com', 'https://yourdomain.com'); UPDATE `v9_picture_data` SET `content` = REPLACE(`content`, 'http://yourdomain.com', 'https://yourdomain.com'); UPDATE `v9_download_data` SET `content` = REPLACE(`content`, 'http://yourdomain.com', 'https://yourdomain.com'); ```

注意:如果你的网站使用了CDN且图片域名不同,请忽略上述针对图片的SQL,但需确保CDN支持HTTPS访问。

第五步:修复模板中的静态资源调用

PHPCMS模板中使用了 {CSS_URL} 等宏标记,但部分模板可能硬编码了HTTP头,或者JS加载方式不兼容HTTPS。

修改phpcms/templates/default/header.html

打开模板头部文件,检查 ```

同时,检查模板中是否有调用 site_url($siteid)的地方,确保该函数在开启HTTPS后返回正确的协议。通常修改完 system.php 后此步骤可省略,但为了保险起见,可以在模板中直接使用 https://... 替换部分关键静态资源的调用。

第六步:清除缓存并验证

所有代码和配置修改完成后,必须清除PHPCMS的缓存,否则修改不会生效。

操作步骤

  1. 通过FTP或SSH连接服务器,进入网站根目录。
  2. 找到 caches 文件夹。
  3. 删除 caches 文件夹下的所有文件和文件夹,除了 caches/configs 目录(configs目录存放的是你的配置文件,不要删)。
  4. 或者直接在后台登录:点击 “系统设置” -> “系统工具” -> “更新缓存”

最终验证

  • 打开浏览器访问 http://yourdomain.com,确认是否自动跳转至 https://yourdomain.com
  • 按F12打开开发者工具,查看 Console 是否存在“Mixed Content”错误。
  • 点击地址栏左侧的“锁”图标,查看证书连接状态是否为“安全”。
  • 尝试发布一篇包含图片的文章,检查生成的HTML代码中图片路径是否为HTTPS。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图