0

PHP中是否有任何预定义的方法可以从url获取子域(如果有)?

url 模式可能是:

http://www.sd.domain.com
http://domain.com
http://sd.domain.com
http://domain.com

其中 sd 代表子域。

现在方法必须为每种情况返回不同的值:

案例 1 -> 返回sd

案例 2 -> 返回false

案例 3 -> 返回sd

案例 4 -> 返回false

我找到了一些很好的链接

PHP函数获取URL的子域

从 url 获取子域?

但不适用于我的案例。

任何帮助将是最明显的。

谢谢

4

3 回答 3

0

尝试这个。

[更新] 我们定义了一个常量 _SITE_ADDRESS,例如 www.mysite.com,您可以为此使用文字。

它在我们的系统中运行良好,似乎正是出于这个目的。

public static function getSubDomain()
{
    if($_SERVER["SERVER_NAME"] == str_ireplace('http://','',_SITE_ADDRESS)) return ''; //base domain
    $host = str_ireplace(array("www.", _SITE_ADDRESS), "", strtolower(trim($_SERVER["HTTP_HOST"])));
    $sub =  preg_replace('/\..*/', '', $host);
    if($sub == $host) return ''; //this is likely an ip address
    return $sub;
}

该功能有一个外部注释,但没有链接,对于任何基于此代码的原始开发人员,我们深表歉意。

于 2013-03-14T08:03:09.457 回答
0

好的,我在这里创建一个脚本 :)

$url = $_SERVER['HTTP_HOST'];
$host = explode('.', $url);
if( !empty($host[0]) && $host[0] != 'www' && $host[0] != 'localhost' ){
    $domain = $host[0];
}else{
    $domain = 'home';
}
于 2013-03-14T07:12:31.563 回答
0

所以,有几种可能...

首先,当然是正则表达式:

(http://)?(www\.)?([^\.]*?)\.?([^\.]+)\.([^\.]+)

第三个括号中的条目将是您的子域。当然,如果您的 url 是 https:// 或 www2 (全部查看...),则正则表达式会中断。所以这只是开始工作的初稿。

我的第二个想法是,就像你explode的一样,输入网址。我想到了这样的事情:

function getSubdomain($url) {
    $parts = explode('.', str_replace('http://', '', $url));
    if(count($parts) >= 3) {
        return $parts[count($parts) - 3];
    }
    return null;
}

我在这个函数背后的想法是,如果一个 url 被子.域分割,几乎总是结果数组中的倒数第三个条目。必须首先剥离协议(参见案例 3)。当然,这当然可以做得更优雅。

我希望我能给你一些想法。

于 2013-03-14T07:53:26.803 回答