В веб-разработке часто требуется управлять адресами (URL) страниц, например, изменять параметры запроса, удалять ненужные параметры или получать отдельные части URL (протокол, домен и т.д.). В 1С-Битрикс (в рамках новой архитектуры D7) для этих целей предусмотрен специальный класс \Bitrix\Main\Web\Uri
. Ниже мы рассмотрим, как им пользоваться и решать типичные задачи при работе с URL.

1. Создание объекта Uri
из произвольного URL
Первый шаг при работе с классом \Bitrix\Main\Web\Uri
– это создание его экземпляра. Если у вас есть произвольная строка с URL, достаточно просто передать её в конструктор класса Uri
:
use \Bitrix\Main\Web\Uri;
$url = "https://example.com/catalog/item/?id=123&color=red";
$uri = new Uri($url);
// Теперь в $uri хранится объект класса Uri, и мы можем управлять им
Получив объект $uri
, вы сможете получить или изменить любые части URL (параметры, путь, фрагмент и т.д.).
2. Создание объекта Uri
из адреса текущей страницы
Во многих случаях важна работа именно с адресом текущей страницы, на которой находится пользователь (включая его GET-параметры). В 1С-Битрикс есть несколько способов получить текущий URL.
2.1. Прямое создание из $APPLICATION->GetCurUri()
Если вы привыкли работать с глобальным объектом $APPLICATION
, можете использовать метод GetCurUri()
. Он вернёт URI текущей страницы (без указания домена), но с query-параметрами:
use \Bitrix\Main\Web\Uri;
// Этот метод возвращает URI вида "/catalog/item/?id=123&color=red"
$currentPageUri = $APPLICATION->GetCurUri();
// Создаем объект Uri
$uri = new Uri($currentPageUri);
Если вам нужен полный адрес (с доменом), то придётся сконструировать его вручную, добавив протокол и хост:
$domain = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER['HTTP_HOST'];
$uriStringFull = $APPLICATION->GetCurUri();
$uriFull = new Uri($domain . $uriStringFull);
// Теперь $uriFull содержит полный URL вида "https://example.com/catalog/item/?id=123"
2.2. Создание объекта Uri
из текущего запроса
Альтернативный способ – воспользоваться объектом запроса \Bitrix\Main\HttpRequest
, который считается более «правильным» в парадигме D7:
use \Bitrix\Main\Application;
use \Bitrix\Main\Web\Uri;
// Получаем объект текущего запроса
$request = Application::getInstance()->getContext()->getRequest();
// Достаем URI текущего запроса (путь и параметры, без домена)
$currentUrl = $request->getRequestUri();
// Создаем объект Uri
$uri = new Uri($currentUrl);
// Теперь в $uri содержится объект, описывающий URL текущей страницы
Данный способ удобен для использования в современных компонентах и модулях 1С-Битрикс, где глобальные переменные $APPLICATION
менее востребованы.
3. Получение адреса из объекта Uri
После создания объекта Uri
вы можете снова получить итоговую строку URL с учётом всех изменений.
3.1. Метод getUri()
Метод getUri()
возвращает полный URL (то есть схему, домен, путь и query-параметры):
$originalUrl = $uri->getUri();
echo $originalUrl;
// Например, выведет: https://example.com/catalog/item/?id=123&color=red
3.2. Метод getLocator()
Если нужно получить URL без query-параметров, используйте getLocator()
:
$locator = $uri->getLocator();
echo $locator;
// Выведет, например: https://example.com/catalog/item/
4. Получение полного адреса текущей страницы
Чтобы вывести полный адрес текущей страницы (включая схему и домен), при условии что в $uri
уже есть нужные данные, вы можете:
$currentFullUrl = $uri->getUri();
echo "Текущий полный адрес: " . $currentFullUrl;
Если объект Uri
был создан без схемы и домена (например, из GetCurUri()
), то придётся дополнить их вручную, как в примерах выше.
5. Получение составляющих адреса
Класс Uri
предоставляет методы для доступа к отдельным частям URL:
getScheme()
– протокол (http / https)getHost()
– домен (example.com)getPort()
– порт (если указан в URL, например8080
)getPath()
– путь (например,/catalog/item/
)getQuery()
– строка запроса (часть после?
, напримерid=123&color=red
)getFragment()
– фрагмент (часть после#
, если есть)
echo "Протокол: " . $uri->getScheme() . PHP_EOL;
echo "Домен: " . $uri->getHost() . PHP_EOL;
echo "Порт: " . $uri->getPort() . PHP_EOL;
echo "Путь: " . $uri->getPath() . PHP_EOL;
echo "Параметры: " . $uri->getQuery() . PHP_EOL;
echo "Фрагмент: " . $uri->getFragment() . PHP_EOL;
6. Установка составляющих адреса
Чтобы менять структуру URL, у класса Uri
есть соответствующие «сеттеры»:
setScheme($scheme)
setHost($host)
setPort($port)
setPath($path)
setQuery($query)
setFragment($fragment)
$uri->setScheme("http");
$uri->setHost("newdomain.ru");
$uri->setPath("/newpath/test/");
$uri->setQuery("product=456&sort=desc");
$uri->setFragment("section1");
echo $uri->getUri();
// Результат: http://newdomain.ru/newpath/test/?product=456&sort=desc#section1
7. Добавление параметров в адрес
Одно из самых часто используемых действий – добавить или изменить query-параметры. Для этого есть метод addParams()
:
// Исходный URL: https://example.com/catalog/item/?id=123&color=red
$uri->addParams([
'page' => 2,
'sort' => 'price'
]);
echo $uri->getUri();
// Результат: https://example.com/catalog/item/?id=123&color=red&page=2&sort=price
Важно: если какой-то параметр уже существует, addParams()
перезапишет его значение.
8. Удаление параметров из адреса
Чтобы удалить параметры, используйте метод deleteParams()
, передавая в него массив с именами нужных параметров:
// Исходный URL: https://example.com/catalog/item/?id=123&color=red&page=2&sort=price
$uri->deleteParams(['color', 'sort']);
echo $uri->getUri();
// Результат: https://example.com/catalog/item/?id=123&page=2
9. Удаление системных параметров из адреса
В Bitrix часто встречаются служебные параметры (sessid
, bitrix_include_areas
, bxajaxid
и т.д.), которые бывают не нужны в итоговой ссылке. Их удобно убирать точно так же, методом deleteParams()
:
$systemParams = ['sessid', 'bitrix_include_areas', 'bxajaxid'];
$uri->deleteParams($systemParams);
echo $uri->getUri();
Таким образом вы очищаете адрес от «лишних» системных переменных.
Заключение
Класс \Bitrix\Main\Web\Uri
в D7 значительно упрощает работу с URL в 1С-Битрикс, позволяя:
- Удобно получать нужную информацию о протоколе, домене, пути и параметрах.
- Гибко манипулировать составом query-параметров — добавлять, изменять и удалять их без риска допустить ошибку при ручном парсинге.
- Избегать лишних строковых операций, используя готовые методы для получения и преобразования URL.
Используйте Uri
в своих проектах, чтобы быстрее и надёжнее формировать, модифицировать и анализировать адресные строки. Это позволит писать более чистый и поддерживаемый код, а также снизить вероятность ошибок при работе с URL.