前置准备工作
排查前必须完成2项准备,避免操作失误导致数据丢失:
- 备份全站文件与数据库:宝塔用户可直接在面板站点管理页点击【备份】按钮完成,手动备份可打包站点根目录所有文件 + 导出对应MySQL数据库。
- 复现确认跳转异常:使用curl命令检测跳转链路,Windows用户在CMD执行、Mac/Linux用户在终端执行即可,命令如下:
```
curl -I https://你的实际访问域名
```
如果返回状态码为302、跳转地址不符合预期、出现≥2次循环跳转,即可确认是302异常,也可直接使用站长工具跳转检测页面(https://tool.chinaz.com/tools/jump.aspx)可视化查看完整跳转链路。
常见异常原因与对应修复步骤
1. 伪静态/主机面板跳转规则配置错误(占比70%)
这是最高发的异常原因,大部分是HTTP转HTTPS规则写错、伪静态规则不匹配导致,不要同时在主机面板、伪静态规则、ZBlog后台三个地方配置HTTP转HTTPS,只留一个地方配置即可,分服务器环境处理:
Nginx环境:直接复制以下官方推荐的完整伪静态规则,替换站点Nginx配置里的location /段即可:
```
location / {
放行静态资源与安装目录
if (!-e $request_filename) {
rewrite ^/zb_install/(.)$ /zb_install/$1 last;
rewrite ^/zb_system/(.)$ /zb_system/$1 last;
rewrite ^/zb_users/(.)$ /zb_users/$1 last;
rewrite ^(.)$ /index.php?$1 last;
}
}
```
如果需要配置HTTP转HTTPS,直接在Nginx的80端口server段添加如下规则,不要写在443段里:
```
server {
listen 80;
server_name 你的域名.com www.你的域名.com;
301永久跳转,不要用redirect(对应302临时跳转)
rewrite ^(.)$ https://$host$1 permanent;
}
```
改完后执行重载命令生效:
```
systemctl reload nginx
```
宝塔用户可直接在站点伪静态设置里选择预设的ZBlog规则,再在站点设置里开启【强制HTTPS】即可,不需要手动改配置。
Apache环境:修改站点根目录的.htaccess文件,完整规则如下:
```
RewriteEngine On
RewriteBase /
静态资源直接放行
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
HTTP转HTTPS规则,R=301对应永久跳转,不要只写R(默认302)
RewriteCond %{HTTPS} !=on
RewriteRule ^(.)$ https://%{HTTP_HOST}/$1 [R=301,L]
```
改完后重启Apache生效:
```
systemctl restart httpd
```
2. ZBlog系统内部配置错误

这类问题主要是站点地址不匹配、插件配置错误导致,按以下步骤排查:
- 检查站点地址配置:登录ZBlog后台,点击左侧【站点设置】→【全局设置】,检查“网站地址”字段,必须和你实际要使用的访问地址完全一致,比如你对外使用的是https://www.xxx.com,就不要写成http://xxx.com,改完后点击保存,再点击后台右上角的【清空缓存】按钮。
- 检查强制HTTPS配置:进入【站点设置】→【安全设置】,如果开启了“强制HTTPS访问”,必须确保上一步的网站地址已经改成HTTPS开头,否则会出现循环302跳转,如果你已经在主机面板/伪静态里配置了强制HTTPS,这里可以关闭,避免重复跳转。
- 排查跳转类插件:进入后台【插件管理】,禁用所有301跳转、域名切换、重定向类插件,再测试跳转是否正常,如果恢复正常,逐个开启插件定位错误插件,将插件内的跳转类型修改为301,或者删除错误的跳转规则即可。
3. CDN/反向代理配置错误
如果你的站点用了CDN或者Nginx反向代理,很容易因为回源配置错误导致302异常,按以下步骤排查:
- 先排除CDN问题:暂停CDN解析,把域名A记录直接指向源站服务器IP,清空本地DNS缓存后测试跳转,如果恢复正常,说明是CDN配置问题。Cloudflare用户需要把SSL/TLS加密模式改成【完全】或【严格】,不要选【灵活】,灵活模式下CDN到源站用HTTP请求,源站如果开了强制HTTPS就会循环跳转;其他CDN用户检查页面规则,删除配置错误的302跳转规则,确保回源Host和站点地址一致,回源协议和源站的访问协议一致。
- 反向代理配置修复:如果源站前有Nginx反向代理,必须在代理配置段添加如下头信息,否则ZBlog无法识别用户实际的访问协议,会一直跳转HTTPS:
```
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
```
改完后执行重载Nginx命令生效即可。
验证与兜底修复方案
所有配置修改完成后,必须按以下步骤验证:首先清空ZBlog后台缓存、CDN缓存、本地浏览器缓存,再用之前的curl命令或者站长工具跳转检测工具检查,确认返回状态码为200或者预期的301,没有循环跳转,跳转地址符合预期。
如果以上所有步骤都排查完还是存在302异常,使用兜底方案:下载对应版本的ZBlog安装包,覆盖站点根目录的zb_system目录,绝对不要覆盖zb_users目录,避免丢失主题、插件、上传资源数据,ZBlog官方下载地址:https://www.zblogcn.com/zblogphp/download/,覆盖完成后重新登录后台,重新保存一遍站点设置,清空缓存即可解决系统核心文件损坏导致的跳转异常。