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/sub
文件夹中工作,它会给我sub
。如果我正在使用主目录,该功能正常。是否有替代$_SERVER['HTTP_HOST']
?
或者我如何修复我的功能/代码才能获得主网址?感谢。
答案 0 :(得分:73)
使用SERVER_NAME
。
echo $_SERVER['SERVER_NAME']; //Outputs www.example.com
答案 1 :(得分:32)
您可以使用PHP的parse_url()
函数
function url($url) {
$result = parse_url($url);
return $result['scheme']."://".$result['host'];
}
答案 2 :(得分:20)
最短的解决方案:
$domain = parse_url('http://google.com', PHP_URL_HOST);
答案 3 :(得分:18)
/**
* 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']."/";
}
答案 4 :(得分:9)
像这样使用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"];
}
答案 5 :(得分:3)
首先修剪URL中的尾部反斜杠(/)。例如,如果网址为http://www.google.com/,则结果网址为http://www.google.com
$url= trim($url, '/');
如果方案未包含在URL中,则将其添加到前面。例如,如果网址是www.google.com,则结果网址为http://www.google.com
if (!preg_match('#^http(s)?://#', $url)) {
$url = 'http://' . $url;
}
获取网址的部分内容。
$urlParts = parse_url($url);
现在删除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
答案 6 :(得分:1)
如果您还希望使用http协议,则此方法很好,因为它可以是http或https。
True
答案 7 :(得分:0)
请试试这个:
body
我希望这会对你有所帮助。
答案 8 :(得分:0)
2行解决
$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));
答案 9 :(得分:0)
如果您使用的是wordpress,请使用get_site_url:
get_site_url()
答案 10 :(得分:0)
使用这个代码是whork :
if (!preg_match('#^http(s)?://#', $url)) {
$url = 'http://' . $url;
}
$urlParts = parse_url($url);
$url = preg_replace('/^www\./', '', $urlParts['host']);
答案 11 :(得分:-1)
三元运算符有助于使其简洁明了。
echo (isset($_SERVER['HTTPS']) ? 'http' : 'https' ). "://" . $_SERVER['SERVER_NAME'] ;
答案 12 :(得分:-1)
/* 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;
}