在将一个多店铺的 Magento 商城,由子域名 a.test.com 切换为 b.test.com 时,出现了一个奇怪的现象。
错误的域名跳转
- http://b.test.com 会先 307 到 https://b.test.com
- 然后 302 到 https://c.test.com
第一次见到 307 这个 HTTP 状态码。
简单来说,HTTP 307 (Temporary Redirect) 是一种临时重定向状态码。
它最核心的特点是:要求浏览器在重定向请求时,不得更改 HTTP 方法(Method)。看上去类似 302 临时跳转,有什么区别呢?
- 302 的问题:标准上说 302 不应该改变请求方法,但早期的浏览器(如 IE)在收到 302 后,往往会不管原先是 POST 还是 PUT,统统改用 GET 去请求新地址。
- 307 的诞生:为了消除这种歧义,HTTP/1.1 引入了 307。它明确规定:如果原请求是 POST,重定向后的请求也必须是 POST。
cloudflare DNS 解析
检查了 Nginx 配置,以及 magento 后台的配置。参考:Magento 子店铺域名修改
并没有发现什么问题。
于是怀疑是 cloudflare DNS 的配置问题。
目前是一个 CNAME 记录指向了主域名,看起来比较奇怪,我没有理解为啥要这么配置。
为了排查 DNS 配置的问题,我改成了我更熟悉的 A 记录指向服务器 IP 的设置,并且先禁用了 cloudflare 代理的配置。
这样是为了方便部署 https 证书。
果然改成 A 记录之后,就正常了。。。
cloudflare 处理 301 跳转
为了继承原子域名的权重,在 cloudflare 规则里添加了 301 跳转规则,自动跳转到新域名上。
不得不说,cloudflare 真是方便。可惜只有 3 条规则的限制。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式