“如何检测”;abc";在abc.domain.com或abc.sub.domain.com中使用PHP?
我需要检测用户是否从某个子域访问我的站点。如何检测以下示例并使用PHP标记它?我只想检测“abc”是否是子域,仅此而已,但它必须在“abc”之后与其他各种域一起工作“如何检测”;abc";在abc.domain.com或abc.sub.domain.com中使用PHP?,php,subdomain,hostname,Php,Subdomain,Hostname,我需要检测用户是否从某个子域访问我的站点。如何检测以下示例并使用PHP标记它?我只想检测“abc”是否是子域,仅此而已,但它必须在“abc”之后与其他各种域一起工作 是的,它们在“abc”子域中 不,它们不是。您可以在$\u服务器变量中检查HTTP\u主机或服务器名 <?php if(strpos($_SERVER['SERVER_NAME'], 'abc.domain.com') !== false) { //do something } ?> 您
不,它们不是。您可以在$\u服务器变量中检查HTTP\u主机或服务器名
<?php
if(strpos($_SERVER['SERVER_NAME'], 'abc.domain.com') !== false) {
//do something
}
?>
您可以在$\u服务器变量中检查HTTP\u主机或服务器名称
<?php
if(strpos($_SERVER['SERVER_NAME'], 'abc.domain.com') !== false) {
//do something
}
?>
这将返回子域:
array_shift(explode(".",$_SERVER['HTTP_HOST']));
这将返回子域:
array_shift(explode(".",$_SERVER['HTTP_HOST']));
您可以从
$\u服务器中访问主机名,如下所示:
$domain = $_SERVER['HTTP_HOST']
然后有多种方法可以确定此值是否以abc
开头。最简单的方法可能是stripos
if(stripos('abc', $domain) === 0) {
// you found it
}
请注意,此处使用===
而不是==
非常重要。如果您使用了=
并且在$domain
中未找到子字符串,stripos
将返回false
,使用==0
将在您的条件中评估为true
。您可以从$\u服务器中访问主机名,如下所示:
$domain = $_SERVER['HTTP_HOST']
<?php
if( explode( '.', $_SERVER['SERVER_NAME'] )[0] === 'abc' ) {
//do something
}
?>
然后有多种方法可以确定此值是否以abc
开头。最简单的方法可能是stripos
if(stripos('abc', $domain) === 0) {
// you found it
}
请注意,此处使用===
而不是==
非常重要。如果您使用了=
,并且在$domain
中找不到子字符串,stripos
将返回false
,如果==0
将在您的条件语句中计算为true
。
<?php
if( explode( '.', $_SERVER['SERVER_NAME'] )[0] === 'abc' ) {
//do something
}
?>
这将把服务器名分解为被
划分的部分,因此它将把域名的第一部分与字符串abc进行比较
explode(x,x)[N]只有在PHP5.4+(或5.3+,我记不清了)中才可能出现
这将把服务器名分解为被
划分的部分,因此它将把域名的第一部分与字符串abc进行比较
explode(x,x)[N]只有在PHP5.4+(或5.3+,我记不清了)中才可能出现。您可以配置web服务器,将所有子域重定向到一个PHP文件,在该文件中,您可以通过header()
函数来弥补错误或重定向用户,例如
header('Location: http://domain.com');
$url = $_SERVER['SERVER_NAME'];
list($subdomain) = explode('.', $url, 2);
$subdomain = trim(strtolower($subdomain));
另外,因为您确定特定的PHP文件是因为子域而被访问的,所以您可以执行以下操作
header('Location: http://domain.com');
$url = $_SERVER['SERVER_NAME'];
list($subdomain) = explode('.', $url, 2);
$subdomain = trim(strtolower($subdomain));
然后以您喜欢的方式使用$subdomain
变量(例如打印它)
以防万一。对于Apache配置,您需要修改VirtualHost
,以便将子域重定向到PHP文件进行处理
<VirtualHost *:80>
ServerAlias *.domain.com
DocumentRoot /website/directory/page.php
</VirtualHost>
ServerAlias*.domain.com
DocumentRoot/website/directory/page.php
注意
1.)重新启动Apache。
2.)Apache将警告您该目录不存在。这是真的,因为您提供的是文件路径而不是目录路径。但是这是可行的。您可以将web服务器配置为将所有子域重定向到单个PHP文件,在该文件中您可以弥补错误,或者通过header()
函数重定向用户,类似于
header('Location: http://domain.com');
$url = $_SERVER['SERVER_NAME'];
list($subdomain) = explode('.', $url, 2);
$subdomain = trim(strtolower($subdomain));
另外,因为您确定特定的PHP文件是因为子域而被访问的,所以您可以执行以下操作
header('Location: http://domain.com');
$url = $_SERVER['SERVER_NAME'];
list($subdomain) = explode('.', $url, 2);
$subdomain = trim(strtolower($subdomain));
然后以您喜欢的方式使用$subdomain
变量(例如打印它)
以防万一。对于Apache配置,您需要修改VirtualHost
,以便将子域重定向到PHP文件进行处理
<VirtualHost *:80>
ServerAlias *.domain.com
DocumentRoot /website/directory/page.php
</VirtualHost>
ServerAlias*.domain.com
DocumentRoot/website/directory/page.php
注意
1.)重新启动Apache。
2.)Apache将警告您该目录不存在。这是真的,因为您提供的是文件路径而不是目录路径。但这是可行的