反向代理下WordPress出现301重定向循环问题(Nginx环境)
解决Nginx代理WordPress站点的301重定向循环问题
问题根源分析
当前配置存在两处核心错误导致循环:
- Nginx代理配置未正确处理新站点返回的重定向响应,请求在新旧域名间来回跳转;
- 新站点wp-config.php存在语法错误(如错误的常量名)和逻辑错误(错误覆盖服务器环境变量),导致WordPress生成错误的重定向地址。
修复步骤
1. 修正旧站点Nginx配置(old_wordpress_host.com.conf)
调整后的配置如下,关键修改点已标注:
location ^~ /blog { rewrite ^/blog(/.*)$ $1 break; proxy_ssl_server_name on; proxy_pass_request_headers on; proxy_pass https://new_wordpress_host.com/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; # 强制替换新站点返回的重定向地址,避免跳回新域名 proxy_redirect https://new_wordpress_host.com/ https://old_wordpress_host.com/blog/; server_name_in_redirect off; }
核心修改说明:
添加proxy_redirect指令,将新站点返回的所有指向new_wordpress_host.com的重定向,替换为旧站点的/blog路径,阻断循环链路。
2. 修正新站点wp-config.php配置
替换原有错误配置,修复语法和逻辑问题:
// 修正常量名(移除多余的点) define('COOKIE_DOMAIN', 'old_wordpress_host.com'); define('SITECOOKIEPATH', '/blog'); if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { // 正确获取真实客户端IP $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = trim($list[0]); // 告诉WordPress对外的访问地址 define('WP_SITEURL', 'https://old_wordpress_host.com/blog'); define('WP_HOME', 'https://old_wordpress_host.com/blog'); // 修正HTTP_HOST为旧站点域名 $_SERVER['HTTP_HOST'] = 'old_wordpress_host.com'; // 正确识别HTTPS协议 if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; } }
核心修改说明:
- 修复常量名错误:
.COOKIE_DOMAIN.改为COOKIE_DOMAIN,.SITECOOKIEPATH.改为SITECOOKIEPATH,并将SITECOOKIEPATH设为/blog匹配旧站点路径; - 删除错误的
$_SERVER['REMOTE_ADDR']和$_SERVER['SERVER_ADDR']赋值(这两个变量存储IP地址,不能设置为域名); - 统一
WP_SITEURL和WP_HOME的格式,避免路径拼接错误。
验证修复
- 重启Nginx服务:
sudo systemctl restart nginx - 清除浏览器缓存或使用无痕模式访问
https://old_wordpress_host.com/blog,检查是否正常加载且无重定向循环。
内容的提问来源于stack exchange,提问作者Haroon
相关产品推荐
相关产品推荐

