网站从正式域名复制到测试域名后,前台和后台都可能陷入重定向循环。这个问题不能靠反复清缓存碰运气,先看清楚到底是哪两个地址在互相跳。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
记录下来,通常两三次就能看出是谁在重复改协议或域名。

