Я хочу определить, проходит ли пользователь через http или https и переключается на https в определенных областях веб-сайта. Проблема в том, что мой сервер не отображает $ _SERVER ['HTTPS'], поэтому, я думаю, мне придется настроить php.ini, чтобы показать его.
Я не могу понять, какие значения изменить на php ini, чтобы показать это.
Спасибо.
Изменение: я не пытаюсь найти альтернативный способ обнаружения использования https. Я спрашиваю, как я могу редактировать php.ini, чтобы $ _SERVER ['HTTPS'] отображал значение, когда я обращаюсь к https://
Edit2: Возможно, это было недостаточно ясно. $ _SERVER ['HTTPS'] НЕ СУЩЕСТВУЕТ ВСЕ
Обновление/Ответ: Благодаря @Sheriff я положил
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
внутри этого блока в папке моего виртуального хоста ~.php $ {}
И теперь отображаются индикаторы $ _SERVER
[HTTPS] => on
[HTTP_SCHEME] => https
Раньше это не сработало, потому что я поставил значения параметра fastcgi в блоке сервера. Дурак я.
Нет конфигураций php.ini для $_SERVER['HTTPS']
. Этот ключ установлен на непустое значение, только если запрос был сделан через HTTPS. Значение, if (!empty(filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN))) {/* request was made over https */}
.
Подробнее см. В руководстве.
'HTTPS'
Установите для непустого значения, если скрипт был запрошен через протокол HTTPS.
Заметка:
Обратите внимание, что при использовании ISAPI с IIS значение будет
off
если запрос не был выполнен по протоколу HTTPS.
filter_var
с FILTER_VALIDATE_BOOLEAN
вернет логическое значение false
если это значение равно "0"
, "false"
, "off"
, "no"
, ""
или NULL
.
Также важно помнить, что PHP только заполняет $_SERVER['HTTPS']
из информации, которую он получает через API-интерфейс SAPI (Server API), который он использует для связи с вашим программным обеспечением веб-сервера. Таким образом, это может быть mod_php, или fcgi и т.д. Обычно эти данные заполняются из переменных среды, которые PHP копирует с вашего веб-сервера через SAPI. По умолчанию Apache httpd будет включать переменную окружения HTTPS, когда соединение выполняется через HTTPS, однако nginx не будет, если вы используете fastcgi_pass
. Вам необходимо настроить это самостоятельно, изменив конфигурацию nginx, чтобы установить fastcgi_param
для HTTPS
. Это позволит nginx уведомлять php-fpm о переменной среды по fastcgi, и она может быть заполнена в вашем PHP соответственно.
Также обратите внимание, что это можно сделать еще более сложным, если вы используете nginx в качестве обратного прокси-сервера, так как обратный прокси также должен будет передавать информацию в прокси-узел таким же образом.
Тем не менее, вы должны заметить, что использование PHP для перенаправления на HTTPS по умолчанию, вероятно, является плохой идеей. Лучше настроить ваш веб-сервер, чтобы сделать это вместо этого.
Например, в Apache httpd вы можете настроить свой VHOST для перенаправления всего HTTP-трафика на HTTPS по умолчанию, что, вероятно, будет более безопасным и простым в случае, если вы забудете об этом в какой-либо конечной точке PHP. Это предполагает, что ваши намерения заключаются в том, чтобы обеспечить соблюдение HTTPS на всем сайте или в определенном домене.
$_SERVER['HTTPS']
отображается только при доступе к серверу через соединение по протоколу SSL.