протокол https сервера показа php.ini

1

Я хочу определить, проходит ли пользователь через 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 в блоке сервера. Дурак я.

  • 0
    $_SERVER['HTTPS'] отображается только при доступе к серверу через соединение по протоколу SSL.
  • 0
    Да, и я получил доступ к нему через HTTPS до сих пор не показывает его.
Показать ещё 6 комментариев
Теги:
https

1 ответ

1
Лучший ответ

Нет конфигураций 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 на всем сайте или в определенном домене.

  • 0
    Да, я знаю об этом. Но я не против, чтобы другие части сайта были http. Я просто хочу https на странице входа.
  • 0
    Ваш код блока if {} не работает на моем сервере. Я поставил эхо "https access"; внутри блока if, чтобы увидеть, обнаружит ли php, но нет
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню