网站从正式域名复制到测试域名后,前台和后台都可能陷入重定向循环。这个问题不能靠反复清缓存碰运气,先看清楚到底是哪两个地址在互相跳。Cookie 域名、Base URL、反向代理传来的 HTTPS 标记,都会造成同一个表象。

先把跳转链打印出来

浏览器只显示“重定向次数过多”,信息不够。先在服务器外执行:

curl -I -L --max-redirs 10 https://staging.example.com/

如果 http 和 https 来回切换,优先查代理和 secure 配置;如果 URL 没变但不断返回 302,通常更像 Cookie、Store Code 或后台会话问题。也可以去掉 -L,逐次看 Location 和 Set-Cookie。

数据库是从旧站导入的,先查Cookie域名

SELECT scope, scope_id, path, value
FROM core_config_data
WHERE path IN (
  'web/cookie/cookie_domain',
  'web/unsecure/base_url',
  'web/secure/base_url',
  'web/secure/use_in_frontend',
  'web/secure/use_in_adminhtml',
  'web/secure/offloader_header'
)
ORDER BY path, scope, scope_id;

web/cookie/cookie_domain 如果还写着旧域名,浏览器不会把会话 Cookie 发给新站。这里还要留意 website/store 级配置是否覆盖 default 值。测试环境没有特殊要求时,可以把 Cookie Domain 留空,让 Magento 按当前 Host 生成;需要显式设置时,只填域名,不要带协议、路径或端口。

HTTPS在负载均衡器终止,就核对offloader header

常见架构是用户访问 HTTPS,但 Nginx、Ingress 或 CDN 回源 Magento 时使用 HTTP。Magento 如果不知道外层请求本来是 HTTPS,就会再次跳到 HTTPS,代理又回源 HTTP,于是形成循环。

先确认代理实际传的是哪个头:

proxy_set_header X-Forwarded-Proto $scheme;

Magento 的 web/secure/offloader_header 要与之匹配,通常是 X-Forwarded-Proto。不要因为看到别人配置了 SSL_OFFLOADED 就直接照搬,关键是 Web 服务器交给 PHP 的请求头名称和 Magento 配置必须一致。

修改后只清配置缓存,再删旧Cookie

php bin/magento cache:clean config full_page

用无痕窗口重新访问,避免旧域名 Cookie 干扰判断。如果后台仍循环,再检查 env.php 中的后台前缀、Web 服务器是否额外做了 www 跳转,以及 CDN 是否也配置了一层 HTTP 到 HTTPS 规则。把每一跳的 Location 记录下来,通常两三次就能看出是谁在重复改协议或域名。