Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何检测”;abc";在abc.domain.com或abc.sub.domain.com中使用PHP?_Php_Subdomain_Hostname - Fatal编程技术网

“如何检测”;abc";在abc.domain.com或abc.sub.domain.com中使用PHP?

“如何检测”;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 } ?> 您

我需要检测用户是否从某个子域访问我的站点。如何检测以下示例并使用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
}
?>

这将返回子域:

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将警告您该目录不存在。这是真的,因为您提供的是文件路径而不是目录路径。但这是可行的