做网页的网页人迟早会碰到跳转这件事。用户提交完表单要跳、跳转登录过期要跳、代码旧链接要重定向到新地址。网页跳转本身不难,跳转但不同写法之间差别不小,代码用错了会踩坑。网页
最基础的跳转写法是
<meta http-equiv="refresh" content="5;url=https://example.com">。这行代码放在<head>里,代码5 秒后浏览器自动跳到目标地址。网页数字改成 0 就是跳转立即跳。我最早做静态页面时经常用它,代码因为不需要写 JavaScript,网页扔进 HTML 就能跑。跳转但它有个硬伤:用户点浏览器后退键,代码很可能又被弹回去,因为浏览器把这条 meta 指令当成了页面历史的一部分。另外,搜索引擎对这种跳转的权重传递也不如 301 干净。真正做网站运营的话,服务器端的 301 和 302 才是正路。301 是永久重定向,302 是临时重定向。换域名、改 URL 结构,用 301,搜索引擎会把老页面的权重转移到新地址。做活动页临时引流,用 302,避免搜索引擎把临时地址当成正式入口。这两个状态码在 Apache 的
.htaccess里写一行Redirect 301 /old.html /new.html就搞定,Nginx 则在配置文件里加return 301 https://new.com$request_uri;。服务器端跳转发生在浏览器拿到页面之前,用户地址栏直接变成新地址,历史记录干净,没有后退弹回的毛病。JavaScript 跳转的灵活性最高,代价是依赖脚本执行。
window.location.href = "https://example.com";是最常见的写法,会往浏览器历史里压一条记录,用户点后退能回到原页面。window.location.replace("https://example.com");则不压历史,后退直接跳过当前页。做登录成功后的跳转,我一般用 replace,免得用户退回来又看到登录页。还有一种情况是判断设备后跳转,比如检测到移动端 UA 就跳到m.example.com,这种逻辑只能靠 JS 来做。有个细节容易被忽略:
window.location和document.location在现代浏览器里指向同一个对象,但老代码里常见document.location,知道它们等价就行。另外,如果页面里同时写了 meta refresh 和 JS 跳转,两个都会触发,谁先执行取决于解析顺序,结果可能出乎意料。别混着用。还有一种跳转是 HTTP 头里的
Location。后端代码里调response.sendRedirect("/new-page")(Java)或者header("Location: /new-page")(PHP),本质就是发一个 302 响应。这种方式在需要根据业务逻辑决定跳转目标时最常用,比如支付完成后根据订单状态跳到不同结果页。选哪种?静态页面临时跳一下,meta refresh 够用。做 SEO 相关的地址迁移,老老实实上 301。需要条件判断、延迟跳转、带参数拼接,JS 更顺手。后端能控制响应头的时候,优先用 HTTP 状态码,语义最清晰。我见过有人用 JS 做全站重定向,结果用户禁用 JavaScript 后页面直接白屏,这种坑完全可以用服务器端配置绕开。
跳转代码本身没多少行,但选错了轻则用户体验差,重则搜索引擎降权。搞清楚每种方式的适用场景,比背代码重要。
顶: 8814踩: 527






评论专区