Я хотел бы перевести моих зарегистрированных пользователей в 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
В вашем вопросе недостаточно информации, но вы упоминаете, что в одном из ваших комментариев вы используете балансировщик нагрузки.
Если вы прерываете SSL на балансировщике нагрузки, но используете HTTP между ELB и вашим экземпляром, то эта проверка всегда будет неудачной:
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
Вместо этого вам нужно будет проверить X-Forwarded-Proto
чтобы увидеть, если исходный запрос HTTPS.
Других решений пока нет …