多站点:如果子域不存在,则重定向到适当的域

时间:2014-01-16 作者:Shawn

我有一个包含域的多站点:

站点1。com,站点2。com,site3。com等网站。com是多站点的“主域”。到目前为止,我正试图同时解决两个问题。

如果我试着举例。站点2。com(不存在的子域)它将重定向到site1。com/wp注册。php(我禁用了注册)。我试着用https://wordpress.stackexchange.com/a/85530/35677, 我的是:

function prevent_multisite_signup() 
{
    wp_redirect(site_url(), 301);
    exit;
}
add_action(\'signup_header\', \'prevent_multisite_signup\');
当然,这确实部分实现了我想要的功能,即重定向到带有301的主页,但它是site1。com而非site2。com。是否有办法将此代码调整为始终指向其父域?我甚至尝试先获取blog\\u id,然后获取url并传递它,但在调用此函数时,blog id是针对site1的。com。

理想的答案是用代码或类似的东西。htaccess。

2 个回复
最合适的回答,由SO网友:Shawn 整理而成

我能够解决这个问题。htaccess。

在我的wp配置中。php我检索了数组中的站点。如果需要,可以从数据库中获取此信息。然后,我将输入的url与已知站点进行匹配并进行检查。在我的例子中,所有URL都以结尾。com(如果将来需要,我可以随时修改preg以用于.net或w/e)。为了安全起见,我还清理了url。然后我基本上告诉wordpress何时重定向到使用基本域(即访问域的主页)。wordpress的默认设置是转到多站点安装中的主站点。

以下是我的片段:

preg_match(\'#^.*\\.([A-Za-z]*.com)#\', filter_var($_SERVER["HTTP_HOST"], FILTER_SANITIZE_URL), $match);
$attempted_domain = $match[1];
$domain = \'http://site1.com\';

//wordpress handles the parent domain of multisite special; so DO NOT set NOBLOGREDIRECT for site1.com. For example site1.com/doesnotexist will not show a 404 page but the homepage instead which is incorrect so have to add this first if conditional
if($attempted_domain == $domain){
    //otherwise check against our domain list and then redirect to that domain (site2.com/thisdoesnot exist will work correctly)
    foreach($all_domains AS $known_domain){
        if($attempted_domain == $known_domain){
            $domain = \'http://\'.$known_domain;
            break;
        }
    }
    define(\'NOBLOGREDIRECT\', $domain);
}
1.)这里要微妙地认识到的是,DNS解析您的域。有点像胡说八道。令人惊叹的疯子富。酒吧站点1。com将访问您的网站。在这种情况下,我要确保无论存在多少子域级别,我都会对照基本域站点1进行检查。com在我的网站列表中。

2.)只有当您尝试转到不存在的站点时,才会使用NOBLOGREDIRECT。例如,丢失的页面/帖子仍将像通常一样为404。See #4 for exception

3)如果由于某种原因找不到域,请使用我们知道存在的默认值。例如,如果我们更改了DNS,但实际上尚未设置站点,则可能会发生这种情况。

4.)访问安装的父域时,内部wordpress功能和NOBLOGREDIRECT有一个特例。您会注意到,当父域是正在访问的域时,我从未设置NOBLOGREDIRECT。否则,404不会显示给家长,您会被重定向到不正确的主页。安装中的其他域不受影响,因此我们可以在那里使用NOBLOGREDIRECT。

SO网友:user42826

如果要将所有未注册的子域重定向到主域站点:

function prevent_multisite_signup() 
{
    $domain = $_SERVER[\'HTTP_HOST\'];
    $domain = explode(\'.\', $domain);
    $domain = array_reverse($domain);
    $domain = "$domain[1].$domain[0]";
    wp_redirect($domain, 301);
    exit;
}
add_action(\'signup_header\', \'prevent_multisite_signup\');

结束

相关推荐

MultiSite Get_Home_url();-获取当前站点的URL

使用多站点时,get\\u home\\u url()的替代品是什么?例如,如果我在多个站点上安装了一个主题,并且在该主题中有需要特定于当前站点的链接。在我的单次安装中,使用get\\u home\\u url();会给我http://domain.com/, 这很好,如果我把主题移到另一个领域,什么都不会受到影响。但是,当我在多站点上使用相同的主题时,get\\u home\\u url();给了我http://domain.com/ 无论我目前在哪个网站上。我需要的是每个域。com/sitename/