PHP中是否有任何预定义方法可以从url获取子域?
url模式可能是:
http://www.sd.domain.com
http://domain.com
http://sd.domain.com
http://domain.com
其中sd代表sub-doamin。
现在,方法必须为每种情况返回不同的值:
案例1 - >返回 sd
案例2 - >返回 false 或为空
案例3 - >返回 sd
案例4 - >返回 false 或为空
我找到了一些很好的链接
PHP function to get the subdomain of a URL
但并非特别适用于我的案件。
任何帮助都会非常明显。
由于
答案 0 :(得分:0)
好的,我在这里创建一个脚本:)
$url = $_SERVER['HTTP_HOST'];
$host = explode('.', $url);
if( !empty($host[0]) && $host[0] != 'www' && $host[0] != 'localhost' ){
$domain = $host[0];
}else{
$domain = 'home';
}
答案 1 :(得分:0)
所以,有几种可能性......
首先,当然是正则表达式:
(http://)?(www\.)?([^\.]*?)\.?([^\.]+)\.([^\.]+)
第三个括号中的条目将是您的子域。当然,如果您的网址是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)。当然,这当然可以做得更优雅。
我希望我能给你一些想法。
答案 2 :(得分:0)
试试这个。
[update]我们有一个常量定义的_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;
}
关于该功能有一个外部注释,但没有链接,对于任何原始开发人员,我很抱歉这是基于它的代码。