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.

Комментарии