301和302都是将URL地址转移到新的地址中,这是二者的共同点。
不同点是:
301适合永久重定向:
常见场景是使用域名跳转。浏览器发出原始请求后重定向到新地址,浏览器会缓存这个请求,等下次再次访问原始地址时会直接请求到新地址去。
302适合临时跳转:
可用于临时的、动态的地址跳转,每次请求原地址都会重新重定向到目标地址。应用场景:页面单点登录。
PHP如何实现重定向?例如访问不带www的域名souquan.net跳转到带www的域名www.souquan.net
<?php $host=$_SERVER['HTTP_HOST']; if (startWith($host, 'souquan.net')) { header('HTTP/1.1 301 Moved Permanently'); header('Location: https://www.'. $host . $_SERVER['REQUEST_URI']); exit; } function startWith($haystack,$needle){ $len = mb_strlen($needle); return mb_substr(strtolower($haystack), 0, $len) === $needle; } function endWith($haystack,$needle){ $len = mb_strlen($needle); return mb_substr(strtolower($haystack), -1, $len) === $needle; } ?>