Уроки PHP – Как получить URL текущей страницы
Довольно часто вам придется узнавать URL текущей страницы в своем PHP приложении. Например, если вам нужно сделать какое-то конкретное действие в зависимости от фактического URL адреса.
Как получить URL текущей страницы с помощью PHP
В языке программирования PHP есть некоторые встроенные глобальные переменные, которые делают процесс получения текущего URL-адреса довольно простым. Вы можете получить любую информацию о текущем URL с помощью суперглобального массива $_SERVER .
С помощью этого массива вы можете получить название доменного имени, название скрипта, параметры URL или их варианты.
Теперь давайте посмотрим, как это работает. Для примера давайте возьмем следующую сложную структуру URL адреса:
Давайте разберем этот URL на составные части:
- http – это протокол
- sebweo.com – это имя хоста (доменное имя).
- test – это каталог, в котором размещен PHP скрипт
- some-script.php – это фактическое имя PHP скрипта
- city=Kyiv – это первый параметр URL (город) и его значение (Kyiv)
- start=482 – это второй параметр URL (start) и его значение (482)
А теперь давайте попробуем создать тот же URL с помощью PHP.
- Получаем протокол ссылки
Протокол URL ссылки может быть получен из переменной $_SERVER[‘SERVER_PROTOCOL’] .
Однако, если вы запустите этот код, вы получите значение не просто http или https, а такую строку: HTTP/1.1
Чтобы получить чистую строку протокола, нам нужно провести определенные манипуляции с этим значением:
- Получаем имя хоста (домен)
На следующем шаге мы выясним имя хоста. Для этого используется значение массива $_SERVER[‘HTTP_HOST’] . Вы можете использовать это так:
- Получаем каталог и имя текущего PHP скрипта
Значение $_SERVER[‘SCRIPT_NAME’] содержит полный путь с именем фактического PHP сценария. Вы можете это использовать так:
- Получаем параметры текущего URL
Последняя часть текущего URL-адреса содержится в значении $_SERVER[‘QUERY_STRING’] и вы можете его использовать так:
- Получаем фактический URI ( /test/some-script.php?city=Kyiv&start=482 )
Если для вас не важны протокол и имя хоста (домен), а только путь, имя скрипта и параметры URL, вы можете просто использовать конструкцию $_SERVER[‘REQUEST_URI’] следующим образом:
Таким образом, чтобы получить полный URL текущей страницы с помощью PHP, это можно сделать так:
ВАЖНО. Записи в суперглобальном массиве $_SERVER создаются веб-сервером. Нет гарантии, что все веб-серверы предоставят любую из этих записей; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Однако, многие из этих переменных присутствуют в спецификации CGI/1.1, поэтому вы можете ожидать их поддержку сервером.
Как в php получить текущий URL?
Сегодня поговорим о том, как получить адрес страницы в php.
Зачем это может быть нужно?
Сценарии могут быть разными. Например, у нас используется один и тот же шаблон для разных разделов. Но в одном из разделов нам необходимо вывести (или не вывести) какой-то специфичный блок, которого в других разделах быть не должно.
Вероятно мы захотим сделать это по условию. И именно в условии мы и будем проверять тот ли это раздел.
Возможно с архитектурной точки зрения – это не самое лучшее решение. Однако, очень часто нам достаются уже готовые проекты, с которыми нужно что-то делать.
Получаем URL текущей страницы
Чтобы получить необходимую информацию, мы будем обращаться к такой глобальной переменной в php, как $_SERVER.
Переменная $_SERVER – это массив, который хранит в себе много полезной информации: заголовки, пути, местоположения скриптов.
Если вы хотите посмотреть всё, что хранит этот массив, то можете воспользоваться следующим кодом, который в читабельном виде выведет все значения:
Итак, давайте представим, что у нас есть веб страница следующего вида: http://localhost/php-lessons/url/?name=anna&city=Valencia.
Я тестирую на локальном сервере. Когда вы будете работать с реальным сайтом, который лежит в сети, то вместо localhost у вас будет имя вашего сайта (например exmple.ru).
Что мы видим в нашем подопытном url?
- Нас может интересовать адрес страницы без GET-параметров;
- адрес страницы с GET-параметрами;
- или просто сами GET-параметры без адреса страницы.
Давайте разберемся с каждой ситуацией.
Получаем полный URL страницы в php
Чтобы получить полный URL страницы вместе с GET-параметрами, воспользуемся следующим кодом:
Сначала мы проверяем, какой протокол используется: https или http.
Если значение $_SERVER[‘HTTPS’] не пусто, значит это https, иначе http.
Далее мы присоединяем двоеточие и 2 слэша, имя домена (хоста) и остальную часть нашего URL.
Результат будет вот таким:
Если протокол нам получать не нужно, то можно сократить код до такого:
Результат тогда будет следующим:
Получаем URL страницы без GET-параметров в php
Иногда нас не интересуют GET-параметры, которые передаются как часть URL, и нам нужно получить адрес без них.
GET-параметры в нашем случает – это name=anna&city=Valencia
Чтобы отсечь их мы можем использовать php-функцию explode, которая разбивает строку по разделителю.
Наш URL – это ни что иное, как строка. GET-параметры всегда начинают передаваться после знака “?”. Следовательно разделителем будет вопросительный знак.
Функция explode превратит строку в массив с двумя элементами. В первом будет содержаться наш искомый url без GET-параметров, а во втором останутся GET-параметры.
Результат будет таким: http://localhost/php-lessons/url/
Получаем GET-параметры из URL
Здесь совсем все просто. Чтобы получить только GET-параметры будем использовать следующий код:
Дальше мы можете разобрать это строку, например, с помощью функции explode или сделать с ними что-либо еще (в зависимости от стоящей перед вами задачи).
Как получить ссылку на текущую страницу при помощи JS и PHP
Привет, друзья. Сегодня поговорим о том, как в JS и PHP получить адрес текущей страницы. Дело в том, что разработчику часто нужно выполнить какой-то код, только на определенных страницах или в зависимости от каких-то GET параметров. Как раз в таких случаях удобно сохранить все данные из адресной строки в объект или строку, чтобы иметь возможность удобно манипулировать своим кодом/разметкой в зависимость от полученных параметров.
Обычно я сталкиваюсь с такими задачами:
- Получение utm-меток, в зависимости от которых мы можем менять контент на странице.
- Определение адреса страниц, на которых стоит подключить какой-то скрипт.
- Получение адреса страницы для передачи ссылки в форму обратной связи, чтобы понимать с какой страницы совершён заказ ( в том числе и передача utm-меток в форму).
Как получить ссылку на текущую страницу в Javascript
Для начала давайте разберемся как справиться с задачей при помощи js. В javascript есть объект Location, который позволяет получить текущий URL страницы. Доступ к нему я обычно произвожу через глобальный объект Window или Document. В итоге Window.location возвращает нам объект со свойствами, в которых и содержится интересующая нас информация. Например, самыми популярными для меня свойствами являются: href, hostname, pathname и search.
Для пример возьмем url:
window.location.href
Команда возвращает полный адрес страницы, то есть ссылку со всеми параметрами.
window.location.hostname
Команда возвращает домен текущей страницы.
window.location.pathname
Вернет путь до текущей страницы, исключая домен и параметры. То есть покажет категорию/рубрику/папку, в которой находится страница.
window.location.search
Возвращает GET-параметр начиная со знака «?», то есть позволяет получить любые параметры, которые вы передаёте вместе со ссылкой. В том числе и пресловутые UTM-метки.
Как видите, в js есть все, чтобы легко справиться с задачей получения ссылки на текущую страницу. Но это не все возможности, которые дает нам javascript. Также можно получить протокол, порт, домен с портом и хеш из адресной строки. Делается это при помощи следующих свойств: protocol, port, host и hash.
Как получить ссылку на текущую страницу в PHP
Теперь давайте посмотрим на PHP. На самом деле тут тоже дела обстоят подобным образом. Есть готовый массив $_SERVER , который содержит в том числе и путь к текущей странице.
Get the full URL in PHP
The problem is that I use some masks in my .htaccess , so what we see in the URL is not always the real path of the file.
What I need is to get the URL, what is written in the URL, nothing more and nothing less—the full URL.
I need to get how it appears in the Navigation Bar in the web browser, and not the real path of the file on the server.
27 Answers 27
Have a look at $_SERVER[‘REQUEST_URI’] , i.e.
(Note that the double quoted string syntax is perfectly correct)
If you want to support both HTTP and HTTPS, you can use
Editor’s note: Using this code has security implications, because the client can set HTTP_HOST and REQUEST_URI to arbitrary values. To mitigate, sanitize and do meaningful input validation.
Short version to output link on a webpage
Here are some more details about the issues and edge cases of the //example.com/path/ format
Full version
This is a heavily modified version of http://snipplr.com/view.php?codeview&id=2734 (Which no longer exists)
URL structure:
scheme://username:password@domain:port/path?query_string#fragment_id
The parts in bold will not be included by the function
Notes:
- This function does not include username:password from a full URL or the fragment (hash).
- It will not show the default port 80 for HTTP and port 443 for HTTPS.
- Only tested with http and https schemes.
- The #fragment_id is not sent to the server by the client (browser) and will not be added to the full URL.
- $_GET will only contain foo=bar2 for an URL like /example?foo=bar1&foo=bar2 .
- Some CMS’s and environments will rewrite $_SERVER[‘REQUEST_URI’] and return /example?foo=bar2 for an URL like /example?foo=bar1&foo=bar2 , use $_SERVER[‘QUERY_STRING’] in this case.
- Keep in mind that an URI = URL + URN , but due to popular use, URL now means both URI and URL.
- You should remove HTTP_X_FORWARDED_HOST if you do not plan to use proxies or balancers.
- The spec says that the Host header must contain the port number unless it is the default number.
Client (Browser) controlled variables:
- $_SERVER[‘REQUEST_URI’] . Any unsupported characters are encoded by the browser before they are sent.
- $_SERVER[‘HTTP_HOST’] and is not always available according to comments in the PHP manual: http://php.net/manual/en/reserved.variables.php
- $_SERVER[‘HTTP_X_FORWARDED_HOST’] gets set by balancers and is not mentioned in the list of $_SERVER variables in the PHP manual.
Server controlled variables:
- $_SERVER[‘HTTPS’] . The client chooses to use this, but the server returns the actual value of either empty or "on".
- $_SERVER[‘SERVER_PORT’] . The server only accepts allowed numbers as ports.
- $_SERVER[‘SERVER_PROTOCOL’] . The server only accepts certain protocols.
- $_SERVER[‘SERVER_NAME’] . It is set manually in the server configuration and is not available for IPv6 according to kralyk.
Related:
Examples for: https://(www.)example.com/subFolder/myfile.php?var=blabla#555
- The hashtag # parts were manually used in the above example just for illustration purposes, however, server-side languages (including PHP) can’t natively detect them (only JavaScript can do that, as the hashtag is only browser/client side functionality).
- DIRECTORY_SEPARATOR returns \ for Windows-type hosting, instead of / .
For WordPress
![]()
![]()
Here’s a solution using a ternary statement, keeping the code minimal:
This is the smallest and easiest way to do this, assuming one’s web server is using the standard port 443 for HTTPS.
My favorite cross platform method for finding the current URL is:
![]()
![]()
Note: I just made an update to Timo Huovinen’s code, so you won’t get any GET parameters in the URL. This URL is plain and removes things like ?hi=i&am=a&get .
will be shown as:
This is fine unless you use GET paramaters to define some specific content, in which case you should use his code! 🙂
Clear code, working in all webservers (Apache, nginx, IIS, . ):
Same technique as the accepted answer, but with HTTPS support, and more readable:
The above gives unwanted slashes. On my setup Request_URI has leading and trailing slashes. This works better for me.
![]()
HTTP_HOST and REQUEST_URI must be in quotes, otherwise it throws an error in PHP 7.2
If you want to support both HTTP and HTTPS:
![]()
![]()
Here is my solution — code is inspired by Tracy Debugger. It was changed for supporting different server ports. You can get full current URL including $_SERVER[‘REQUEST_URI’] or just the basic server URL. Check my function:
Here is test code:
![]()
I’ve made this function to handle the URL:
![]()
![]()
This is quite easy to do with your Apache environment variables. This only works with Apache 2, which I assume you are using.
Simply use the following PHP code:
![]()
This is the solution for your problem:
![]()
$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here. That said, a large number of these variables are accounted for in the » CGI/1.1 specification, so you should be able to expect those.
$HTTP_SERVER_VARS contains the same initial information, but is not a superglobal. (Note that $HTTP_SERVER_VARS and $_SERVER are different variables and that PHP handles them as such)