重定向301和302的区别,以及PHP如何实现重定向

在HTTP状态码中,3XX表示重定向,指网页发生了转移,重定向到目标地址中,301:表示永久性转移 (Permanently Moved)302:表示临时性转移(Temporarily Moved)

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;
}
?>