当前位置:首页 > 休闲

网站域名重定向怎么解决

昨天夜里两点,网站我正改着客户的域名一个WordPress站,突然发现整站打不开。重定浏览器地址栏里,向解域名后面硬生生多了一个/index.php。网站刷新三次,域名还是重定这样。后台登录页也跳到了带端口号的向解诡异地址上。这种问题,网站干这行的域名人都懂——域名重定向在作妖。

网站域名重定向,重定说白了就是向解服务器告诉浏览器“你要找的东西不在这个地址,去那边吧”。网站正常情况它帮你把用户从旧域名导到新域名,域名或者把http强制切到https,重定这没问题。但一旦重定向规则写错了,或者缓存里有残留,就会出现循环跳转、带多余路径、甚至跳到完全不相干的钓鱼站上去。我见过最离谱的一次,某个客户的域名被重定向到了一个博彩网站,那哥们差点报警。

排查的第一步,先分清是哪种重定向。301是永久性的,浏览器和搜索引擎都会记住。302是临时的,每次访问都得重新走一遍规则。还有一种meta refresh,藏在网页源代码的<head>里,几秒钟后自动跳走。你按F12打开开发者工具,切到Network面板,刷新页面,看第一个请求的响应头。里面有个Location字段,它会告诉你跳转目标。如果看到一串跳转链,A跳到B,B又跳回A,那就是循环重定向,八成是规则冲突了。

最常见的罪魁祸首是.htaccess文件——Apache服务器上的配置文件。很多人在里面写了几十条重定向规则,新旧规则叠在一起,互相打架。比如你既写了“把旧域名全部301到新域名”,又写了“所有http请求强制跳转https”,如果顺序不对,就可能出现无限循环。解决办法很简单,把文件下载下来,逐行检查,把冲突的规则注释掉,或者干脆备份后清空,再一条条加回去。Nginx服务器的话,看server块里的rewrite和return 301指令,逻辑一样。

WordPress用户要格外小心。很多缓存插件会生成静态HTML文件,里面写死了旧的跳转地址。你后台设置改了,但缓存没清,访客看到的还是老一套。我处理过一单,客户说“我明明把域名从example.com改成了newexample.com,怎么访问旧域名还是跳到原来的页面?”折腾了半天,最后发现是WP Super Cache的缓存文件里,所有链接都硬编码了旧域名。清空缓存,问题秒解。另外,数据库里的wp_options表,siteurl和home这两个字段,如果被插件或者恶意脚本改过,也会导致跳转异常。用phpMyAdmin进去看一眼,不费事。

还有一类隐蔽的情况——DNS层面。域名解析记录里如果加了显性URL转发,比如把old.com用302转发到new.com/about,那不管服务器配置多干净,用户访问old.com还是会跳。这种得去域名注册商的后台改,把转发记录删掉,换成A记录或者CNAME指向服务器IP。我吃过这个亏,当时排查了整整一个下午,服务器日志翻了个底朝天,最后发现是阿里云解析里一条不起眼的隐性转发在捣鬼。

最后说个土办法。实在找不到原因,就把浏览器缓存和Cookie全清了再试。有时候问题根本不在服务器,是你自己浏览器存了旧的301响应,本地就把地址改了。换个无痕窗口访问,如果一切正常,那就是缓存的事。真遇到顽固的,用curl命令在终端里直接请求域名,看返回的响应头,绕过浏览器那一层,结果最干净。

重定向这东西,看着简单,坑起来真要命。核心思路就一条:从浏览器端一路回溯到DNS解析,逐层排查。别一上来就改代码,先看现象,再定位层级。多数时候,问题出在你最想不到的那个配置上。

分享到: