PHP: как получить URL страницы: проверенные способы
Знать текущий URL страницы в PHP бывает необходимо для разных задач. Например, чтобы сформировать ссылку на данную страницу, добавить в нее новые GET-параметры или проверить, что пользователь зашел на нужный адрес. В этой статье мы разберем несколько способов получения URL в PHP.
С помощью $_SERVER
Самый простой способ - воспользоваться глобальным массивом $_SERVER. В нем содержится множество разных параметров окружения сервера и запроса. В частности, интересующий нас URL хранится в $_SERVER['REQUEST_URI']:
$url = $_SERVER['REQUEST_URI'];
Это даст нам путь относительно корня сайта, например /about/contacts.php. Чтобы получить полный URL, можно добавить протокол и домен:
$protocol = $_SERVER['REQUEST_SCHEME']; // http или https $host = $_SERVER['HTTP_HOST']; // имя хоста $url = $protocol . '://' . $host . $_SERVER['REQUEST_URI'];
С помощью функции get_current_url()
Еще один легкий способ - вызвать функцию get_current_url(). Она вернет URL страницы в виде строки:
$url = get_current_url();
Это удобный вариант, если не нужно разбирать URL на части. Функция автоматически возвращает абсолютный адрес.
Через суперглобальные переменные
URL страницы можно собрать из суперглобальных переменных $_SERVER
и $_GET
. Пример:
$url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST']; if (!empty($_SERVER['REQUEST_URI'])) { $url .= $_SERVER['REQUEST_URI']; } if (!empty($_GET)) { $url .= '?' . http_build_query($_GET); }
Здесь мы берем протокол и домен из $_SERVER
, путь к файлу из REQUEST_URI
, а GET-параметры формируем из массива $_GET
с помощью функции http_build_query()
.
С помощью функций parse_url и http_build_url
Еще один способ - разобрать URL на части с помощью parse_url()
, отфильтровать лишнее, а потом собрать обратно через http_build_url()
:
$url = $_SERVER['REQUEST_URI']; $parts = parse_url($url); // Оставляем только нужное $parts['path'] = '/' . ltrim($parts['path'], '/'); unset($parts['query']); // Собираем URL $url = http_build_url('', $parts);
Этот метод дает больше контроля при формировании URL. Мы можем изменить или удалить ненужные части.
Другие способы
Еще пара вариантов получения URL:
- Через
$_ENV['REQUEST_URI']
- работает как$_SERVER['REQUEST_URI']
- С помощью
getenv('REQUEST_URI')
- то же самое, но через функцию getenv() - Используя
$_SERVER['PHP_SELF']
- возвращает только путь к текущему PHP-скрипту
Как видите, вариантов получения URL страницы в PHP достаточно много. Выбирайте тот, который больше подходит под вашу задачу.
Надеюсь, эта статья помогла разобраться с получением текущего URL в PHP. Успехов в разработке!
Помимо рассмотренных выше основных способов, существует еще несколько менее используемых вариантов получения URL страницы в PHP.
Через переменную окружения REDIRECT_URL
В переменной окружения REDIRECT_URL также содержится запрошенный пользователем URL. Можно получить его так:
$url = getenv('REDIRECT_URL');
Этот способ работает, если на сервере включен модуль mod_rewrite и используются правила переписывания URL. Тогда в REDIRECT_URL будет оригинальный запрошенный адрес до применения правил.
Получение через массив $GLOBALS
В глобальном массиве $GLOBALS тоже можно найти нужные данные:
$url = $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'];
Здесь используется устаревший массив $HTTP_SERVER_VARS, но на некоторых хостингах это может быть рабочим решением.
Использование файла .htaccess
Если есть доступ к настройкам Apache через .htaccess, то можно отправлять текущий URL в переменную окружения:
SetEnv CURRENT_URL %{REQUEST_URI}
А затем получить его в PHP:
$url = getenv('CURRENT_URL');
Получение через JavaScript
URL страницы можно получить на стороне клиента с помощью JS:
let url = window.location.href;
А затем передать в PHP, например, через AJAX.
Использование класса Symfony\Component\HttpFoundation\Request
Во фреймворке Symfony есть компонент HttpFoundation, который позволяет получить текущий URL:
$request = Request::createFromGlobals(); $url = $request->getUri();
Это хорошее решение при использовании Symfony.