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']
?
Или как я могу исправить свою функцию / код, чтобы получить только основной URL? Благодарю.
Используйте SERVER_NAME
.
echo $_SERVER['SERVER_NAME']; //Outputs www.example.com
Вы можете использовать parse_url()
PHP
function url($url) { $result = parse_url($url); return $result['scheme']."://".$result['host']; }
/** * 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']."/"; }
Используйте 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"]; }
Самое короткое решение:
$domain = parse_url('http://google.com', PHP_URL_HOST);
Попробуйте следующее:
$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'
Я надеюсь, что это поможет вам.
Сначала обрезайте обратную косую черту (/) с URL. Например, если URL-адрес – http://www.google.com/, то результирующий URL-адрес будет http://www.google.com.
$url= trim($url, '/');
Если схема не включена в URL-адрес, добавьте ее. Например, если URL-адрес http://www.google.com, то результирующий URL-адрес будет http://www.google.com.
if (!preg_match('#^http(s)?://#', $url)) { $url = 'http://' . $url; }
Получите части URL-адреса.
$urlParts = parse_url($url);
Теперь удалите www. из URL-адреса
$domain = preg_replace('/^www\./', '', $urlParts['host']);
Ваш конечный домен без http и www теперь хранится в переменной $ domain.
Примеры:
http://www.google.com => google.com
https://www.google.com => google.com
http://www.google.com => google.com
http://google.com => google.com