веб-сервисы amazon — Почему этот фрагмент кода PHP, отправляющий логины в HTTPS, вызывает цикл перенаправления?

Я хотел бы перевести моих зарегистрированных пользователей в HTTPS, но разрешить незарегистрированным пользователям оставаться по HTTP (https уже настроен). Я взял этот фрагмент кода из другого поста SO (извиняюсь, что не могу теперь найти пост для ссылки) и вложил его в условие if ($ loggedin), чтобы не вошедшим в систему пользователям не приходилось использовать https. Все мои пути являются относительными на сайте.

if($loggedin)
{
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
}

Я попытался вставить некоторые предупреждения javascript в функцию, но когда я загружаю страницу, я никогда не вижу предупреждения и вместо этого перехожу прямо к сообщению об ошибке перенаправления. Я не знаю, уместно ли это, но я использую эластичную балансировку нагрузки с сервером Apache на AWS.

Любые идеи относительно того, что я мог бы сделать неправильно здесь? Или советы по устранению неполадок, так как мои предупреждения JavaScript не отображаются? Спасибо.

Изменить: я нашел сообщение SO, я первоначально взял этот код:
Принудительное использование SSL / https с использованием .htaccess и mod_rewrite

2

Решение

В вашем вопросе недостаточно информации, но вы упоминаете, что в одном из ваших комментариев вы используете балансировщик нагрузки.

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

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {

Вместо этого вам нужно будет проверить X-Forwarded-Proto чтобы увидеть, если исходный запрос HTTPS.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]