Я использую этот код, чтобы получить полный URL:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Проблема в том, что я использую некоторые маски в моем .htaccess
, так что то, что мы видим в URL, не всегда является реальным путем к файлу.
Мне нужно получить URL, то, что написано в URL, не больше и не меньше - полный URL.
Мне нужно узнать, как это выглядит на панели навигации в веб-браузере, а не реальный путь к файлу на сервере.
Ответы:
Посмотрите
$_SERVER['REQUEST_URI']
, т.е.(Обратите внимание, что синтаксис строки в двойных кавычках совершенно правильный )
Если вы хотите поддерживать как HTTP, так и HTTPS, вы можете использовать
Примечание редактора: использование этого кода имеет последствия для безопасности . Клиент может установить HTTP_HOST и REQUEST_URI на любое произвольное значение, которое он хочет.
источник
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Короткая версия для вывода ссылки на веб-страницу
Вот еще некоторые подробности о проблемах и крайних случаях формата //example.com/path/
Полная версия
Это сильно модифицированная версия
http://snipplr.com/view.php?codeview&id=2734
.Структура URL:
схема: // имя пользователя: пароль @ домен: порт / путь? строка_запроса # фрагмент_ид
Части, выделенные жирным шрифтом, не будут включены функцией
Ноты:
username:password
полный URL-адрес или фрагмент (хэш).#fragment_id
Не отправляется на сервер клиента (браузера) и не будут добавлены к полному URL.$_GET
будет содержать толькоfoo=bar2
для URL, как/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
и возвращать/example?foo=bar2
URL, например/example?foo=bar1&foo=bar2
,$_SERVER['QUERY_STRING']
в этом случае.URL + URN
, но из-за популярного использования, URL теперь означает и URI, и URL.HTTP_X_FORWARDED_HOST
если вы не планируете использовать прокси или балансировщики.Host
заголовок должен содержать номер порта, если он не является номером по умолчанию.Клиентские (браузерные) контролируемые переменные:
$_SERVER['REQUEST_URI']
, Любые неподдерживаемые символы кодируются браузером перед отправкой.$_SERVER['HTTP_HOST']
и не всегда доступен в соответствии с комментариями в руководстве по PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
устанавливается балансировщиками и не упоминается в списке$_SERVER
переменных в руководстве по PHP.Управляемые сервером переменные:
$_SERVER['HTTPS']
, Клиент решает использовать это, но сервер возвращает фактическое значение пустого или «вкл».$_SERVER['SERVER_PORT']
, Сервер принимает только разрешенные номера в качестве портов.$_SERVER['SERVER_PROTOCOL']
, Сервер принимает только определенные протоколы.$_SERVER['SERVER_NAME']
, Он устанавливается вручную в конфигурации сервера и недоступен для IPv6 по версии kralyk .Связанные с:
HTTP_HOST против SERVER_NAME Требуется
ли номер порта в параметре заголовка HTTP «Host»?
https://stackoverflow.com/a/28049503/175071
источник
$_SERVER['REQUEST_URI']
покажет/example?foo=bar2
для URL, как/example?foo=bar1&foo=bar2
Host
заголовка, не видел, чтобы он был установлен таким образом, спасибо, что упомянул его, добавит его как твикПримеры для:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Обратите внимание! ! !
#
части хештега использовались вручную в вышеприведенном примере только в целях иллюстрации, однако серверные языки (включаяphp
) не могут их нативно определять (это может сделать только Javascript, поскольку хештег является толькоbrowser/client side
функциональностью).DIRECTORY_SEPARATOR
возвращает\
для хостинга типа Windows вместо/
.Для WordPress
источник
Вот решение, использующее троичное выражение , сохраняющее минимальный код:
Это самый маленький и простой способ сделать это, предполагая, что веб-сервер использует стандартный порт 443 для HTTPS .
источник
$_SERVER["HTTPS"] == "on"
чтобы проверить, включен ли SSL.Мой любимый кроссплатформенный метод для поиска текущего URL:
источник
Просто используйте:
источник
http://example.com
:8080
/request.php
и потерпеть неудачу. Эти ответы сложны по причине.Примечание: я только что обновил код Тимо Хуовинена , чтобы вы не получили никаких параметров GET в URL. Этот URL является простым и удаляет такие вещи, как
?hi=i&am=a&get
.Пример:
будет отображаться как:
Это нормально, если вы не используете GET-параметры для определения какого-то конкретного содержимого, и в этом случае вы должны использовать его код! :-)
источник
Очистить код, работающий на всех веб-серверах (Apache, nginx, IIS, ...):
источник
Вот мое решение - код вдохновлен Tracy Debugger . Это было изменено для поддержки различных портов сервера. Вы можете получить полный текущий URL, включая
$_SERVER['REQUEST_URI']
или просто базовый URL сервера. Проверьте мою функцию:Вот тестовый код:
источник
http_build_url
требуется pecl_http установленоИспользование:
Если вы хотите поддерживать HTTP и HTTPS:
источник
Та же методика, что и для принятого ответа, но с поддержкой HTTPS и более читабельная:
источник
Я сделал эту функцию для обработки URL:
источник
Используйте эту однострочную строку, чтобы найти URL родительской папки (если у вас нет доступа к http_build_url (), который поставляется вместе с pecl_http):
источник
Это довольно легко сделать с помощью переменных окружения Apache. Это работает только с Apache 2, который, я полагаю, вы используете.
Просто используйте следующий код PHP:
источник
Попробуй это:
$_SERVER
массив, содержащий информацию, такую как заголовки, пути и местоположения скрипта Записи в этом массиве создаются веб-сервером. Нет никакой гарантии, что каждый веб-сервер предоставит какой-либо из них; серверы могут опускать некоторые или предоставлять другие, не перечисленные здесь. Тем не менее, большое количество этих переменных учитывается в спецификации »CGI / 1.1, так что вы должны иметь возможность ожидать их.$HTTP_SERVER_VARS
содержит ту же исходную информацию, но не является суперглобальным. (Обратите внимание, что$HTTP_SERVER_VARS
и$_SERVER
являются разными переменными, и что PHP обрабатывает их как таковые)источник
Вы можете использовать http_build_url без аргументов, чтобы получить полный URL текущей страницы:
источник
Я сделал этот класс для обработки моих URI
Конечно, вы должны адаптировать его к вашим потребностям и системе!?!
Это все еще должно быть усовершенствовано, но это - хорошее решение для централизованной системы URI: D
источник
Это решение вашей проблемы:
источник
Я использовал это утверждение.
Я надеюсь, что это поможет вам.
источник
источник
Я использовал приведенный ниже код, и он отлично работает для меня, в обоих случаях, HTTP и HTTPS.
демонстрация
источник
$_SERVER['HTTPS'] = 'off'
запустит HTTPS-путь. Это не кажется правильным. С другой стороны, я не думаю, что оригинальная логика тоже была правильной.источник
Вот основа более безопасной версии принятого ответа с использованием PHP- функции filter_input , которая также компенсирует потенциальный недостаток
$_SERVER['REQUEST_URI']
:Вы можете использовать несколько разных фильтров, чтобы настроить его по своему вкусу.
источник
Вы можете использовать,
HTTP_ORIGIN
как показано в фрагменте ниже:источник
Очень простое использование:
источник
Я думаю, что этот метод хорош .. попробуйте
источник
Это работает как для HTTP, так и для HTTPS.
Выведите что-то вроде этого.
источник
Подробнее: как получить полный URL-адрес страницы с помощью PHP
источник