Я пробовал довольно много разных решений ( здесь , здесь , здесь , здесь ), но почти все из нихвызвал либо 404, либо бесконечно циклы.
Наконец я нашел этот вопрос , который, кажется, ближе всего подходит к работе;но это также вызывает ошибку в Firefox, когда я пытаюсь загрузить одно из действий, для которых я хочу требовать SSL:
Страница не перенаправляет должным образом
Firefox обнаружил, чтосервер перенаправляет запрос на этот адрес способом, который никогда не будет завершен.
Эта проблема иногда может быть вызвана отключением или отказом в приеме файлов cookie.
Наконец через группуотладки я обнаружил, что env('HTTPS')
всегда возвращает null
по некоторым причинам (как и $this->RequestHandler->isSsl();
и $_SERVER['HTTPS']
), даже когда я использую соединение HTTPS.Я не могу понять, почему это происходит, так как мой браузер сообщает, что я защищен SSL, и мой сертификат, кажется, установлен правильно.
Подробнее
Сервер nginx
listen 80;
listen 443 ssl;
ssl_certificate /etc/ssl/certs/domain.chain.crt;
ssl_certificate_key /etc/ssl/private/domain.key;
...
App Controller
var $secureItems = array('login', 'edit', 'viewDocs');
function beforeFilter() {
$this->Auth->allow('index', 'display');
$this->set('loggedUser', $this->Auth->user());
$this->__checkSSL();
}
__checkSSL()
и вспомогательные функции непосредственно из предыдущего вопроса о ссылке ( этот ).
Страницы загружаются нормально в HTTP и HTTPS, если это не одно из действий, перечисленных в $secureItems
, и как только я перехожу к одному из этих действий (HTTP или HTTPS), оно бесконечно перенаправляет.
Любая помощь приветствуется!
Редактировать :
Я почти уверен, что проблема в бесконечном цикле, вызванном env('HTTPS')
, всегда равным нулю.Так как оно имеет нулевое значение, условие проверки всегда ложно и делает его перенаправленным на URL-адрес HTTPS, даже если он уже на нем.
Есть ли другой способ проверить HTTPS или кто-то может сказать мне, почему env('HTTPS')
всегдавозвращает ноль?