这个问题是因为WordPress设置了强制HTTPS重定向。您需要从几个地方检查:
1. 首先检查WordPress设置
登录WordPress后台
“`bash
# 使用浏览器访问
http://100.88.88.150/wp-admin
“`
在后台检查:
1. 设置 → 常规
· WordPress地址(URL)
· 站点地址(URL)
确保两者都是 http://100.88.88.150(不是https)
2. WordPress可能被插件或主题强制HTTPS

2. 检查数据库设置

“`bash
# 查看WordPress的站点URL设置
sudo mysql -u root -p wordpress -e “SELECT * FROM wp_options WHERE option_name IN (‘siteurl’, ‘home’);”
“`

如果显示https,修改它:

“`bash
# 修改为HTTP
sudo mysql -u root -p wordpress << EOF UPDATE wp_options SET option_value = 'http://100.88.88.150' WHERE option_name = 'siteurl'; UPDATE wp_options SET option_value = 'http://100.88.88.150' WHERE option_name = 'home'; EOF ``` 3. 检查wp-config.php设置 ```bash # 查看配置文件是否有强制HTTPS sudo grep -i "https\|ssl\|443" /var/www/wordpress/wp-config.php # 常见的强制HTTPS设置 # define('FORCE_SSL_ADMIN', true); # define('FORCE_SSL_LOGIN', true); # $_SERVER['HTTPS'] = 'on'; ``` 如果有,注释或删除它们: ```bash sudo nano /var/www/wordpress/wp-config.php ``` 查找并注释掉: ```php // 注释掉这些行 // define('FORCE_SSL_ADMIN', true); // define('FORCE_SSL_LOGIN', true); // $_SERVER['HTTPS'] = 'on'; ``` 4. 检查.htaccess文件(如果存在) ```bash # Nginx通常不用.htaccess,但WordPress可能生成 sudo ls -la /var/www/wordpress/.htaccess # 如果有,检查重定向规则 sudo grep -i "https\|redirect\|rewrite" /var/www/wordpress/.htaccess ``` 5. 检查Nginx配置 ```bash # 查看是否有301重定向到HTTPS sudo grep -r "301\|redirect\|https" /etc/nginx/sites-available/ # 检查您的WordPress配置 sudo cat /etc/nginx/sites-available/wordpress | grep -A5 -B5 "301\|https" ``` 6. 快速修复脚本 创建一个修复脚本: ```bash cat > fix_https_redirect.sh << 'EOF' #!/bin/bash echo "=== 修复HTTPS强制重定向 ===" # 1. 备份数据库 echo "1. 备份数据库..." sudo mysqldump -u root -p wordpress > /tmp/wordpress_backup_$(date +%Y%m%d).sql

# 2. 修改数据库URL
echo “2. 修改数据库中的URL设置…”
sudo mysql -u root -p wordpress << 'MYSQL_SCRIPT' UPDATE wp_options SET option_value = REPLACE(option_value, 'https://', 'http://') WHERE option_name IN ('siteurl', 'home'); UPDATE wp_options SET option_value = 'http://100.88.88.150' WHERE option_name = 'siteurl'; UPDATE wp_options SET option_value = 'http://100.88.88.150' WHERE option_name = 'home'; MYSQL_SCRIPT # 3. 检查wp-config.php echo "3. 检查wp-config.php..." sudo sed -i "s/define('FORCE_SSL_ADMIN', true);/\/\/define('FORCE_SSL_ADMIN', true);/g" /var/www/wordpress/wp-config.php sudo sed -i "s/define('FORCE_SSL_LOGIN', true);/\/\/define('FORCE_SSL_LOGIN', true);/g" /var/www/wordpress/wp-config.php sudo sed -i "/\$_SERVER\['HTTPS'\]/d" /var/www/wordpress/wp-config.php # 4. 清理缓存(如果有) echo "4. 清理缓存..." sudo rm -rf /var/www/wordpress/wp-content/cache/* 2>/dev/null

# 5. 重启服务
echo “5. 重启服务…”
sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm

echo “修复完成!”
echo “现在测试:curl -I http://100.88.88.150”
EOF

chmod +x fix_https_redirect.sh
sudo ./fix_https_redirect.sh
“`

7. 临时解决方法(直接修改Nginx)

如果上述方法无效,可以在Nginx配置中强制HTTP:

“`bash
# 编辑Nginx配置
sudo nano /etc/nginx/sites-available/wordpress
“`

在server块中添加(如果已经有重定向,先删除):

“`nginx
server {
listen 80;
server_name 100.88.88.150;

# 强制HTTP,避免任何HTTPS重定向
if ($http_x_forwarded_proto = “https”) {
set $http_x_forwarded_proto “http”;
}

# 拦截WordPress的重定向
location / {
# 覆盖WordPress的任何重定向
proxy_set_header X-Forwarded-Proto http;
proxy_set_header HTTPS off;

# 原有的try_files规则
try_files $uri $uri/ /index.php?$args;
}

# … 其他配置保持不变
}
“`

然后重启:

“`bash
sudo nginx -t
sudo systemctl reload nginx
“`

8. 测试是否修复

“`bash
# 测试重定向
curl -I http://100.88.88.150

# 应该返回200而不是301
# 如果要详细跟踪重定向
curl -L -v http://100.88.88.150 2>&1 | grep -i “location\|http”

# 或者使用更简单的测试
curl -s -o /dev/null -w “%{http_code}” http://100.88.88.150
# 应该返回200
“`

9. 如果仍有问题,启用调试模式

“`bash
# 在wp-config.php中添加调试
sudo nano /var/www/wordpress/wp-config.php
“`

添加:

“`php
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
“`

然后检查日志:

“`bash
sudo tail -f /var/www/wordpress/wp-content/debug.log
“`

10. 彻底排查流程

“`bash
# 一步步排查
echo “=== 排查步骤 ===”

echo “1. 检查Nginx配置…”
sudo nginx -T 2>/dev/null | grep -i “rewrite\|redirect\|https”

echo “2. 检查数据库…”
sudo mysql -u root -p wordpress -e “SELECT option_name, option_value FROM wp_options WHERE option_name LIKE ‘%url%’ OR option_value LIKE ‘%https%’;”

echo “3. 检查配置文件…”
sudo grep -r “https\|SSL” /var/www/wordpress/wp-config.php

echo “4. 检查主题和插件…”
sudo find /var/www/wordpress/wp-content -name “*.php” -exec grep -l “force_ssl\|https” {} \;

echo “5. 检查headers…”
curl -I http://100.88.88.150
“`

最可能的原因和解决方案

根据您的输出 X-Redirect-By: WordPress,重定向来自WordPress本身,不是Nginx。按照以下优先级解决:

优先级1:数据库设置(95%可能)

“`bash
# 执行这个最简单有效的修复
sudo mysql -u root -p wordpress -e “UPDATE wp_options SET option_value = ‘http://100.88.88.150’ WHERE option_name IN (‘siteurl’, ‘home’);”
“`

优先级2:WordPress配置

“`bash
# 检查并修复wp-config.php
sudo sed -i “s/https:/http:/g” /var/www/wordpress/wp-config.php
sudo sed -i “/FORCE_SSL/d” /var/www/wordpress/wp-config.php
“`

优先级3:清理缓存

“`bash
sudo rm -rf /var/www/wordpress/wp-content/cache/*
sudo systemctl restart php8.1-fpm
sudo systemctl reload nginx
“`

立即执行的快速修复

“`bash
# 一行命令修复(最有效)
sudo mysql -u root -p wordpress -e “UPDATE wp_options SET option_value = ‘http://100.88.88.150’ WHERE option_name IN (‘siteurl’, ‘home’);” && sudo systemctl reload nginx && curl -I http://100.88.88.150
“`

请先尝试优先级1的数据库修复,这通常能解决99%的WordPress强制HTTPS问题。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注