使用php header()函数将非www重定向到www

时间:2015-12-09 08:32:08

标签: php

我想使用php将非www网址重定向到www。

我知道在htaccess中使用mod_rewrite很容易实现。但我想使用php header()进行此重定向。

我编写了一个脚本,用于检查主机是否包含www。

  $url=$_SERVER["HTTP_REFERER"];
if(preg_match_all("/http:\/\/www\./i",$url,$m))
{echo "host has www";}

否则     {echo"主持人不是以www";}开始的。

如果orignal主机是非www,我如何继续使用并添加301状态标题以将其重定向到www.domain.com?

这种重定向是否可以在PHP中使用?

3 个答案:

答案 0 :(得分:6)

你可以这样做:

if (strpos($_SERVER['HTTP_HOST'], 'www') === false) {
    $protocol = isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN)
        ? 'https'
        : 'http';
    header(
        "Location: $protocol://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
        true,
        301
    );
}

答案 1 :(得分:2)

header('Location: http://www.YOURDOMAIN.com/foo/bar?foo=bar', true, 301);

查看here

答案 2 :(得分:2)

您检查REFERER而不是主机名。

$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
    header('Location: ' . $protocol.'www.' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['REQUEST_URI'], true, 301);
    exit;
}

像这样。