Узнать полный URL адрес текущей страницы сайта с HTTPS или HTTP

Мы уже рассматривали вопрос: как узнать путь до скрипта, расположенного на Вашем сайте. Мы разбирали пример: как узнать имя скрипта из адресной строки.

Сегодня рассмотрим более сложный пример. Наша задача узнать полный URL адрес текущей страницы, с протоколом, доменом, каталогом и самим скриптом с параметрами запроса (например: http://weblomaster.ru/catalog/page.php?id=2 ). Здесь, как и раньше, нам поможет суперглобальный массив $_SERVER. Но обо всем по порядку.

Начнем с протокола. В двух , самых распространенных случаях, протокол бывает либо HTTP, либо HTTPS (защищенное соединение SSL). Чтобы определить с каким случаем мы имеем дело, используем $_SERVER['HTTPS'] который в случае с защищенным соединением принимает значение on

if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') $protocol = "https";
else $protocol = "http";

Разобравшись с протоколом , переходим к собственно к адресу сайта, то есть к названию хоста – доменному имени или айпи адресу (что зависит от настройки Вашего сервера). На всякий случай полезно проверить порт сервера , если Апачь запущен не на традиционном 80 порту , а SSL на на традиционном для него 443-м, порт нужно будет указать после хоста (например: http://weblomaster.ru:8000/catalog/page.php?id=2). В противном случае порт можно опустить

$port = ":" . $_SERVER['SERVER_PORT'];
if( ($protocol == "http" && $port=="80") || ($protocol == "https" && $port=="443") ) $port = "";
$host = $_SERVER['HTTP_HOST'];
if(!isset($host)) $host = $_SERVER['SERVER_NAME']; /* если HTTP_HOST не определен , используем резервный вариант SERVER_NAME */

Последнее что нам осталось это указать путь: каталог , название скрипта и параметры запроса к скрипту. После чего можно соединить весь адрес воедино:
$path = $_SERVER['REQUEST_URI'];
$url_address = $protocol . "://" . $host . $path;

Полностью скрипт выглядит следующим образом:

<?
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') $protocol = "https";
else $protocol = "http";
$port = ":" . $_SERVER['SERVER_PORT'];
if( ($protocol == "http" && $port=="80") || ($protocol == "https" && $port=="443") ) $port = "";
$host = $_SERVER['HTTP_HOST'];
if(!isset($host)) $host = $_SERVER['SERVER_NAME']; /* если HTTP_HOST не определен , используем резервный вариант SERVER_NAME */
$path = $_SERVER['REQUEST_URI'];
$url_address = $protocol . "://" . $host . $path;
?>

Если беспокоитесь за безопасность можете попробовать обработать получившийся адрес с помощью регулярных выражений , либо htmlspecialchars, например так:

$url_address = htmlspecialchars($url_address, ENT_QUOTES, ‘UTF-8′);

или проверьте адрес на корректность штатной функцией PHP – parse_url() .

Опубликовано 11.03.2015 в 09:09 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: PHP программирование · Теги: , , , , ,