wordpress从根域重定向到子域

时间:2017-09-02 20:47:54

标签: php wordpress apache redirect

环境描述:一个带有根网站example.com的Wordpress多站点和多个子域,如en.example.com,es.example ......

问题:如何根据浏览器的语言将用户带到正确的子域?

到目前为止发现的插件:Wordpress重定向描述包含以下内容:

  

WordPress插件,它从多站点的根站点重定向   项目到特定语言的网站。

     

请注意:此插件不允许根网站上的内容!   请仔细阅读此说明,看看这是否适合您。

似乎这个重定向插件是用于重定向到子文件夹,我是wordpress的新手,很久以前我用PHP做过一些事情,但它应该不会那么复杂我猜...

1 个答案:

答案 0 :(得分:1)

您的体系结构错误,WordPress多站点不用于语言翻译,除非您希望为其他语言设置完全不同的设计/主题,您应该使用Polylang (Free)之类的插件,如果您使用子域名,则可以使用子域名你想要的!

但是回答你的问题,如果你继续使用当前的多站点架构,你会使用这样的函数:

function redirectOtherLanguages(){

    if(!isReturningVisitor())
    {
        $domain = getDomain();
        $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
        $newAddress = 'http://'.$lang.'.'.$domain.$_SERVER['REQUEST_URI'];
        echo $newAddress; die();
        header("Location: ".$newAddress);//include check session FR
    }
}

function getDomain(){
    $parts=explode('.', $_SERVER["SERVER_NAME"]);
    $potentialSubDomain = array_shift($parts);
    //print_r($parts); die();
    if(!empty($parts)){
        if(count($parts)>=2) return implode('.',$parts);
        else return $_SERVER["SERVER_NAME"];
    }
    else return null;
}

//This function prevents redirecting returning users
function isReturningVisitor(){

    if(empty($_COOKIE['returning_visitor'])) 
    {
        setcookie("returning", TRUE, time()+60*60*24*365); // Expires in a year
        return false;       
    }
    return true;       
}

redirectOtherLanguages();

以下是您将遇到的其他一些问题:

  1. 由于每种语言都是不同的网站,因此您需要复制每个帖子,页面等。
  2. 如果您的网站有其他子域名而不是语言本身,您将遇到问题,请您考虑使用Polylang或任何其他方法。
  3. 您还需要在重定向之前检测该语言中的页面是否存在(以避免不需要404)。
  4. 您需要在数组中指定支持的语言列表,如果在阵列上找不到用户语言,则指定默认语言。
  5. ETC !!!!!!!!!!!!!!!!!!!!!