Как получить базовый URL с помощью PHP? - PullRequest
123 голосов
/ 12 мая 2010

Я использую XAMPP в Windows Vista. В моем развитии у меня есть http://127.0.0.1/test_website/.

Как мне получить http://127.0.0.1/test_website/ с PHP?

Я пробовал что-то подобное, но никто из них не работал.

echo dirname(__FILE__)
or
echo basename(__FILE__);
etc.

Ответы [ 21 ]

2 голосов
/ 22 октября 2015

Простой и легкий трюк:

$host  = $_SERVER['HTTP_HOST'];
$host_upper = strtoupper($host);
$path   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$baseurl = "http://" . $host . $path . "/";

URL выглядит так: http://example.com/folder/

1 голос
/ 17 апреля 2015

Вот один, который я только что собрал, который работает для меня. Он вернет массив с 2 элементами. Первый элемент - это все до? а второй - это массив, содержащий все переменные строки запроса в ассоциативном массиве.

function disectURL()
{
    $arr = array();
    $a = explode('?',sprintf(
        "%s://%s%s",
        isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
        $_SERVER['SERVER_NAME'],
        $_SERVER['REQUEST_URI']
    ));

    $arr['base_url']     = $a[0];
    $arr['query_string'] = [];

    if(sizeof($a) == 2)
    {
        $b = explode('&', $a[1]);
        $qs = array();

        foreach ($b as $c)
        {
            $d = explode('=', $c);
            $qs[$d[0]] = $d[1];
        }
        $arr['query_string'] = (count($qs)) ? $qs : '';
    }

    return $arr;

}

Примечание. Это расширение ответа, предоставленного Мачеком выше. (Кредит, причитающийся.)

1 голос
/ 10 января 2019

Попробуйте следующий код:

$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
echo $config['base_url'];
1 голос
/ 04 октября 2016

Отредактировано в ответе @ user3832931 для включения порта сервера ..

для формирования URL-адресов, таких как 'https://localhost:8000/folder/'

$base_url="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($_SERVER["REQUEST_URI"].'?').'/';
0 голосов
/ 07 мая 2019

В моем случае мне понадобился базовый URL-адрес, аналогичный RewriteBase, содержащемуся в файле .htaccess.

К сожалению, простое получение RewriteBase из файла .htaccess невозможно с PHP. Но возможно установить переменную окружения в файле .htaccess и затем извлечь эту переменную в PHP. Просто проверьте эти биты кода:

.htaccess

SetEnv BASE_PATH /

index.php

Теперь я использую это в базовом теге шаблона (в разделе заголовка страницы):

<base href="<?php echo ! empty( getenv( 'BASE_PATH' ) ) ? getenv( 'BASE_PATH' ) : '/'; ?>"/>

Так что, если переменная не была пустой, мы ее используем. В противном случае можно вернуться к / в качестве базового пути по умолчанию.

Исходя из среды, базовый URL всегда будет правильным. Я использую / в качестве базового URL на локальных и производственных сайтах. Но /foldername/ для постановочной среды.

Во-первых, все они имели свои .htaccess, потому что RewriteBase был другим. Так что это решение работает для меня.

0 голосов
/ 04 декабря 2018

Просто протестируйте и получите результат.

// 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/
echo $protocol.$hostName.$pathInfo['dirname']."/";
0 голосов
/ 29 апреля 2017

У меня был тот же вопрос, что и у ОП, но, возможно, другое требование. Я создал эту функцию ...

/**
 * Get the base URL of the current page. For example, if the current page URL is
 * "https://example.com/dir/example.php?whatever" this function will return
 * "https://example.com/dir/" .
 *
 * @return string The base URL of the current page.
 */
function get_base_url() {

    $protocol = filter_input(INPUT_SERVER, 'HTTPS');
    if (empty($protocol)) {
        $protocol = "http";
    }

    $host = filter_input(INPUT_SERVER, 'HTTP_HOST');

    $request_uri_full = filter_input(INPUT_SERVER, 'REQUEST_URI');
    $last_slash_pos = strrpos($request_uri_full, "/");
    if ($last_slash_pos === FALSE) {
        $request_uri_sub = $request_uri_full;
    }
    else {
        $request_uri_sub = substr($request_uri_full, 0, $last_slash_pos + 1);
    }

    return $protocol . "://" . $host . $request_uri_sub;

}

... который, кстати, я использую для создания абсолютных URL-адресов, которые следует использовать для перенаправления.

0 голосов
/ 10 марта 2017

Попробуйте использовать: $_SERVER['SERVER_NAME'];

Я использовал его, чтобы отобразить базовый URL моего сайта для ссылки на мой CSS.

<link href="//<?php echo $_SERVER['SERVER_NAME']; ?>/assets/css/your-stylesheet.css" rel="stylesheet" type="text/css">

Надеюсь, это поможет!

0 голосов
/ 29 апреля 2014
$http = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? "https://" : "http://";

$url = $http . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'];
0 голосов
/ 21 октября 2014
$some_variable =  substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['REQUEST_URI'], "/")+1);

и вы получите что-то вроде

lalala/tralala/something/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...