我有我的服务器上的网站
http://www.myserver.uk.com
为此,我有两个领域:
http://one.com
和
http://two.com
我想用PHP当前域得到的,但如果我使用$_SERVER['HTTP_HOST']
那么这告诉我
myserver.uk.com
代替:
one.com or two.com
我怎样才能获得域名,而不是服务器的名称? 我有PHP 5.2版本
我有我的服务器上的网站
http://www.myserver.uk.com
为此,我有两个领域:
http://one.com
和
http://two.com
我想用PHP当前域得到的,但如果我使用$_SERVER['HTTP_HOST']
那么这告诉我
myserver.uk.com
代替:
one.com or two.com
我怎样才能获得域名,而不是服务器的名称? 我有PHP 5.2版本
尝试使用这样的: $_SERVER['SERVER_NAME']
或解析
$_SERVER['REQUEST_URI']
编辑:
apache_request_headers()
物尽其用是
echo $_SERVER['HTTP_HOST'];
并且可以使用这样的
if(strpos( $_SERVER['HTTP_HOST'], 'banana.com') !== false){
echo "Yes this is indeed the banana.com domain";
}
下面这段代码是看在一个结构化的HTML输出与关键字高亮显示,该执行后直接暂停在$ _SERVER所有变量的好办法。 既然我有时会忘记用自己的哪一个 - 我认为这可能是漂亮的。
<?php
// change banana.com to the domain you were looking for..
$wordToHighlight= "banana.com";
$serverVarHighlighted = str_replace( $wordToHighlight, '<span style=\'background-color:#883399; color: #FFFFFF;\'>'. $wordToHighlight .'</span>', $_SERVER );
echo "<pre>";
print_r( $serverVarHighlighted );
echo "</pre>";
exit();
?>
使用$_SERVER['HTTP_HOST']
让我(子域)maindomain.extension。 似乎是最简单的解决方案给我。
编辑:如果你真的是“转向”通过iframe你可以添加其中规定域GET参数。
<iframe src="myserver.uk.com?domain=one.com"/>
然后你可以设置整个应用程序仍然存在这个数据会话变量。
我不知道这个答案是如何获得数以十万计的看法,并没有手头的安全问题只字不提。
$_SERVER['HTTP_HOST']
这得到域从请求头,这是开放给黑客操纵 ,并可能导致缓存中毒。
$_SERVER['SERVER_NAME']
默认的Apache设置具有usecanonicalname关闭该填充$_SERVER['SERVER_NAME']
用相同的标头$_SERVER['HTTP_HOST']
会反正使用(加上端口)。 这里有一些恶意的例子 。 如果usecanonicalname是,那么它是更安全,但我不知道是否该类型的配置在大多数环境中工作。
注意事项:
唯一可以保证安全的方法是存储域的某个地方,你可以访问。
许多框架已经照顾这样做对你的,因此,请为您的特定框架的文件。 如果你不使用框架,以下任何一种方法都可以工作:
+----------------------------------------------+------------------------+ | Secure Methods of Storing The Current Domain | Default/Recommended In | +----------------------------------------------+------------------------+ | Config file | Joomla, Drupal/Symfony | | Database | WordPress | | Environmental variable | Laravel | | Service registry | Kubernetes DNS | +----------------------------------------------+------------------------+
如果你使用WordPress,你可以安全地得到像这样的域名:
$urlparts = parse_url(home_url());
$domain = $urlparts['host'];
(但如果你在WordPress构造URL,只需使用HOME_URL或SITE_URL ,或任何其他URL的功能 。)
尝试$_SERVER['SERVER_NAME']
。 提示:创建调用该函数的PHP文件phpinfo()
看到了“PHP变量”一节。 有一堆我们从来没有想过有有用的变量。
迟到的回答,但这里有云:
$currentDomain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);
它会给你一个干净的域名,而未经www
我知道这可能并不完全关于这个问题,但我的经验,我发现保存当前URL的WWW岬的变量是有用的。
编辑:另外,请参阅下面我的评论,看什么,这是在得到。
确定是否派遣Ajax和“www”的要求,或没有时,这是非常重要的:
$.ajax("url" : "www.site.com/script.php", ...
$.ajax("url" : "site.com/script.php", ...
当调度一个Ajax调用域名必须在浏览器的地址栏匹配的是,否则就会有未捕获的SecurityError控制台。
所以,我想出了这个解决方案来解决这个问题:
<?php
substr($_SERVER['SERVER_NAME'], 0, 3) == "www" ? $WWW = true : $WWW = false;
if ($WWW) {
/* We have www.example.com */
} else {
/* We have example.com */
}
?>
然后,根据$ WWW是真,还是假的运行适当的Ajax调用。
我知道这听起来微不足道,但是这是这样一个共同的问题,很容易被绊倒的。
对不起,我迟到的回答大家使用parse_url
功能,但有些时候,用户可以通过不同的格式argumet
以解决这个问题我已经创建了finction检查了这一点
function fixDomainName($url='')
{
$strToLower = strtolower(trim($url));
$httpPregReplace = preg_replace('/^http:\/\//i', '', $strToLower);
$httpsPregReplace = preg_replace('/^https:\/\//i', '', $httpPregReplace);
$wwwPregReplace = preg_replace('/^www\./i', '', $httpsPregReplace);
$explodeToArray = explode('/', $wwwPregReplace);
$finalDomainName = trim($explodeToArray[0]);
return $finalDomainName;
}
只是传递的URL,并获得域名例如
echo fixDomainName('https://stackoverflow.com');
将返回的结果将是
stackoverflow.com
并且在某些情况
echo fixDomainName('stackoverflow.com/questions/id/slug');
它也将返回stackoverflow.com
希望能帮助到你
简单地尝试:
echo apache_request_headers()[3];