Подтвердить что ты не робот

Как получить корневой URL-адрес сайта?

Может быть, тривиальный вопрос, но я ищу способ сказать получить корень URL-адреса сайта, например: http://localhost/some/folder/containing/something/here/or/there должен возвращать http://localhost/

Я знаю, что есть $_SERVER['DOCUMENT_ROOT'], но это не то, что я хочу.

Я уверен, что это легко, но я читал: Этот пост пытается выяснить, что я должен использовать или звоню.

Идеи?

Другой вопрос, который у меня есть, который по отношению к этому - есть, будет когда-либо ответом, работать на сайтах вроде http://subsite.localhost/some/folder/containing/something/here/or/there, поэтому мой конечный результат http://subsite.localhost/

4b9b3361

Ответ 1

$root = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';

Если вас интересует текущая схема и хост script.

В противном случае parse_url(), как уже было предложено. например.

$parsedUrl = parse_url('http://localhost/some/folder/containing/something/here/or/there');
$root = $parsedUrl['scheme'] . '://' . $parsedUrl['host'] . '/';

Если вас интересуют другие компоненты URL до пути (например, учетные данные), вы также можете использовать strstr() для полного URL-адреса, а "путь" - как игла, например

$url = 'http://user:[email protected]:80/some/folder/containing/something/here/or/there';
$parsedUrl = parse_url($url);
$root = strstr($url, $parsedUrl['path'], true) . '/';//gives 'http://user:[email protected]:80/'

Ответ 2

Еще один простой способ:

<?php
$hostname = getenv('HTTP_HOST');
echo $hostname;

getenv

(PHP 4, PHP 5)

getenv - получает значение переменной среды

Ответ 3

Эта функция PHP возвращает реальный URL-адрес полного пути.

function pathUrl($dir = __DIR__){

    $root = "";
    $dir = str_replace('\\', '/', realpath($dir));

    //HTTPS or HTTP
    $root .= !empty($_SERVER['HTTPS']) ? 'https' : 'http';

    //HOST
    $root .= '://' . $_SERVER['HTTP_HOST'];

    //ALIAS
    if(!empty($_SERVER['CONTEXT_PREFIX'])) {
        $root .= $_SERVER['CONTEXT_PREFIX'];
        $root .= substr($dir, strlen($_SERVER[ 'CONTEXT_DOCUMENT_ROOT' ]));
    } else {
        $root .= substr($dir, strlen($_SERVER[ 'DOCUMENT_ROOT' ]));
    }

    $root .= '/';

    return $root;
}

Вызов pathUrl в этом файле: http://example.com/shop/index.php

#index.php

echo pathUrl();
//http://example.com/shop/

Работа с псевдонимом: http://example.com/alias-name/shop/index.php

#index.php

echo pathUrl();
//http://example.com/alias-name/shop/

Для подкаталога: http://example.com/alias-name/shop/inc/config.php

#config.php

echo pathUrl(__DIR__ . '/../');
//http://example.com/alias-name/shop/

Ответ 4

Вы можете использовать Define сохранить на define.php include для следующего использования времени в другом проекте Это PROTOCOL DOMAIN PORT SITE_ROOT И SITE PATH

**
 * domain
 * ex: localhost, maskphp.com, demo.maskphp.com,...
 */
define('DOMAIN', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']);

/**
 * protocol
 * ex: http, https,...
 */
define('PROTOCOL', isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1)
    || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http');

/**
 * port
 * ex: 80, 8080,...
 */
define('PORT', $_SERVER['SERVER_PORT']);

/**
 * site path
 * ex: http://localhost/maskphp/ -> /maskphp/
 */
define('SITE_PATH', preg_replace('/index.php$/i', '', $_SERVER['PHP_SELF']));

/**
 * site root
 * ex: http://maskgroup.com, http://localhost/maskphp/,...
 */
define('SITE_ROOT', PROTOCOL . '://' . DOMAIN . (PORT === '80' ? '' : ':' . PORT) . SITE_PATH);

Вы можете отлаживать, чтобы увидеть результат

Ответ 5

Вы можете preg_split URL-адрес в первом одиночном / -character:

function rootUrl($url) {
  $urlParts = preg_split('#(?<!/)/(?!/)#', $url, 2);
  return $urlParts[0] != '' ? $urlParts[0] . '/' : '';
}

// examples:

echo rootUrl('http://[email protected]/path/to/file?query=string');
// output: http://[email protected]/

echo rootUrl('https://www.example.com/');
// output: https://www.example.com/

echo rootUrl('https://www.example.com');
// output: https://www.example.com/

echo rootUrl('example.com/path/to/file');
// output: example.com/

echo rootUrl('/path/to/file');
// output: [empty]

echo rootUrl('');
// output: [empty]

Функция rootUrl($url) возвращает часть данной строки $url перед первым / -character плюс конечный /, если эта первая часть не пуста. Для URL-адресов, начинающихся с / (относительных URL-адресов), возвращается пустая строка.