这个问题是因为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问题。