获取当前域名获取当前域名(Get current domain)

2019-05-14 10:57发布

我有我的服务器上的网站

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版本

Answer 1:

尝试使用这样的: $_SERVER['SERVER_NAME']

或解析

$_SERVER['REQUEST_URI']

编辑:

apache_request_headers()



Answer 2:

物尽其用是

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();
?>


Answer 3:

使用$_SERVER['HTTP_HOST']让我(子域)maindomain.extension。 似乎是最简单的解决方案给我。

编辑:如果你真的是“转向”通过iframe你可以添加其中规定域GET参数。

<iframe src="myserver.uk.com?domain=one.com"/>

然后你可以设置整个应用程序仍然存在这个数据会话变量。



Answer 4:

我不知道这个答案是如何获得数以十万计的看法,并没有手头的安全问题只字不提。

您可以使用以下,但他们缺乏安全感

$_SERVER['HTTP_HOST']

这得到域从请求头,这是开放给黑客操纵 ,并可能导致缓存中毒。

$_SERVER['SERVER_NAME']

默认的Apache设置具有usecanonicalname关闭该填充$_SERVER['SERVER_NAME']用相同的标头$_SERVER['HTTP_HOST']会反正使用(加上端口)。 这里有一些恶意的例子 。 如果usecanonicalname是,那么它是更安全,但我不知道是否该类型的配置在大多数环境中工作。

注意事项:

  • 如果服务器名称不能被解决,操作系统的主机命令在其场所使用[来源] 。
  • 红帽默认[接通usecanonical上源 。
  • 如果主机头排除在外,则服务器将表现得好像是usecanonical上[源] 。

正确的方法

唯一可以保证安全的方法是存储域的某个地方,你可以访问。

许多框架已经照顾这样做对你的,因此,请为您的特定框架的文件。 如果你不使用框架,以下任何一种方法都可以工作:

+----------------------------------------------+------------------------+
| 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用户

如果你使用WordPress,你可以安全地得到像这样的域名:

$urlparts = parse_url(home_url());
$domain = $urlparts['host'];

(但如果你在WordPress构造URL,只需使用HOME_URL或SITE_URL ,或任何其他URL的功能 。)




Answer 5:

尝试$_SERVER['SERVER_NAME'] 。 提示:创建调用该函数的PHP文件phpinfo()看到了“PHP变量”一节。 有一堆我们从来没有想过有有用的变量。



Answer 6:

迟到的回答,但这里有云:

$currentDomain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);

它会给你一个干净的域名,而未经www



Answer 7:

我知道这可能并不完全关于这个问题,但我的经验,我发现保存当前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调用。

我知道这听起来微不足道,但是这是这样一个共同的问题,很容易被绊倒的。



Answer 8:

对不起,我迟到的回答大家使用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

希望能帮助到你



Answer 9:

简单地尝试:

echo apache_request_headers()[3];


文章来源: Get current domain
标签: php url