69
function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . $_SERVER['HTTP_HOST'];
}

例如,使用上面的函数,如果我使用相同的目录,它可以正常工作,但是如果我创建一个子目录并在其中工作,它也会给我子目录的位置,例如。我只是想要,但如果我在文件夹中工作,example.com它会给我。如果我使用主目录,则该功能可以正常工作。有替代方案吗?example.com/subsub$_SERVER['HTTP_HOST']

或者我怎样才能修复我的函数/代码以仅获取主 url?谢谢。

4

13 回答 13

109

使用SERVER_NAME.

echo $_SERVER['SERVER_NAME']; //Outputs www.example.com
于 2013-06-19T21:01:06.027 回答
46

你可以使用 PHP 的parse_url()函数

function url($url) {
  $result = parse_url($url);
  return $result['scheme']."://".$result['host'];
}
于 2013-06-19T21:00:24.170 回答
33

最短的解决方案:

$domain = parse_url('http://google.com', PHP_URL_HOST);
于 2017-05-11T09:08:30.977 回答
28
/**
 * Suppose, you are browsing in your localhost 
 * http://localhost/myproject/index.php?id=8
 */
function getBaseUrl() 
{
    // output: /myproject/index.php
    $currentPath = $_SERVER['PHP_SELF']; 

    // output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index ) 
    $pathInfo = pathinfo($currentPath); 

    // output: localhost
    $hostName = $_SERVER['HTTP_HOST']; 

    // output: http://
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'?'https':'http';

    // return: http://localhost/myproject/
    return $protocol.'://'.$hostName.$pathInfo['dirname']."/";
}
于 2016-05-06T11:17:27.340 回答
10

像这样使用parse_url()

function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . parse_url($_SERVER['REQUEST_URI'], PHP_URL_HOST);
}

这是另一个较短的选择:

function url(){
    $pu = parse_url($_SERVER['REQUEST_URI']);
    return $pu["scheme"] . "://" . $pu["host"];
}
于 2013-06-19T21:01:32.110 回答
5

步骤1

首先从 URL 中修剪尾部的反斜杠 (/)。例如,如果 URL 是http://www.google.com/,那么生成的 URL 将是http://www.google.com

$url= trim($url, '/');

第2步

如果 URL 中未包含方案,则将其添加到前面。例如,如果 URL 是 www.google.com,那么生成的 URL 将是http://www.google.com

if (!preg_match('#^http(s)?://#', $url)) {
    $url = 'http://' . $url;
}

第三步

获取 URL 的各个部分。

$urlParts = parse_url($url);

第4步

现在删除 www。从网址

$domain = preg_replace('/^www\./', '', $urlParts['host']);

没有 http 和 www 的最终域现在存储在 $domain 变量中。

例子:

http://www.google.com => google.com

https://www.google.com => google.com

www.google.com => google.com

http://google.com => google.com

于 2017-11-28T09:22:51.433 回答
2

2 lines to solve it

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$myDomain = preg_replace('/^www\./', '', parse_url($actual_link, PHP_URL_HOST));
于 2019-04-20T20:35:00.290 回答
2
/* Get sub domain or main domain url
 * $url is $_SERVER['SERVER_NAME']
 * $index int remove subdomain if acceess from sub domain my current url is https://support.abcd.com ("support" = 7 (char))
 * $subDomain string 
 * $issecure string https or http
 * return url
 * call like echo getUrl($_SERVER['SERVER_NAME'],7,"payment",true,false);
 * out put https://payment.abcd.com
 * second call echo getUrl($_SERVER['SERVER_NAME'],7,null,true,true);
*/
function getUrl($url,$index,$subDomain=null,$issecure=false,$www=true) {
  //$url=$_SERVER['SERVER_NAME']
  $protocol=($issecure==true) ?  "https://" : "http://";
  $url= substr($url,$index);
  $www =($www==true) ? "www": "";
  $url= empty($subDomain) ? $protocol.$url : 
  $protocol.$www.$subDomain.$url;
  return $url;
}
于 2019-05-22T05:22:43.757 回答
1

如果您还想要 http 协议,这可以正常工作,因为它可以是 http 或 https。 $domainURL = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'];

于 2020-04-18T07:52:26.700 回答
1

使用此代码是 whork :

if (!preg_match('#^http(s)?://#', $url)) {
         $url = 'http://' . $url;
}
$urlParts = parse_url($url);
$url = preg_replace('/^www\./', '', $urlParts['host']);
于 2021-01-11T00:02:26.433 回答
0

请试试这个:

$uri = $_SERVER['REQUEST_URI']; // $uri == example.com/sub
$exploded_uri = explode('/', $uri); //$exploded_uri == array('example.com','sub')
$domain_name = $exploded_uri[1]; //$domain_name = 'example.com'

我希望这能帮到您。

于 2016-07-14T14:49:41.010 回答
-1

如果您使用的是 wordpress,请使用get_site_url

get_site_url()
于 2020-05-13T01:44:40.373 回答
-1

Tenary Operator 有助于保持简短和简单。

echo (isset($_SERVER['HTTPS']) ? 'http' : 'https' ). "://" . $_SERVER['SERVER_NAME']  ;
于 2018-10-02T17:09:01.177 回答