В связи со скорым выходом 56 версии Chrome, которая будет показывать уведомление 'Not Secure' при посещении сайтов без SSL, я постепенно перевожу все свои сайты на использование HTTPS.
Сайты на Joomla конечно же тоже есть в этом списке.

Поскольку у меня сайты работают не на одном сервере, не на одном apache, а на целой связке серверов, то возникают некоторые сложности с настройкой HTTPS подключения и корректной работой некоторых скриптов.

В моём случае если ничего не включать в настройках Joomla и заходить на неё по https, то картинки, css, js грузились по http, что не допустимо.

В интернете почти всюду встречается рецепт:
1. Включаем принудительно SSL в настройках Joomla.
2. Получаем циклическую переадресацию 'too many redirects'.
3. Редактируем /libraries/joomla/environment/uri.php (в версии 3.5 /libraries/joomla/uri/uri.php)
Заменяем
if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off'))
{
$https = 's://';
}
else
{
$https = '://';
}


на
if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off'))
{
$https = 's://';
}
else
{
$https = 's://';
}

тем самым делая условие абсолютно бесполезным.
В этом случае сайт больше не сможет работать по HTTP, не используя HTTPS.
Вся эта ситуация вырисовывается от не верных настроек вэб сервера, в моём случае серверов.
Бэкэнд всё так же думает что используется HTTP соединение, php соответственно тоже, ссылки строятся без учёта HTTPS.

Рекомендую для начала почитать статью "SSL между фронтендом и бэкендом через несколько прокси серверов" и сделать как там указано. В таком случае не нужно будет вносить изменения в файлы скрипта.


Но если хостер не ведётся на ваши уговоры, или у вас что-то ещё не получается, можно изменить всё тот же uri.php, но несколько иным способом.
Находим код и комментируем его, в начале строки поставив два слеша '//'.
if ((isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')))

Строкой ниже добавляем строки
if ((isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ||
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && !empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && (strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) != 'off')))

в этом случае Joomla будет проверять не только наличие переменной $_SERVER['HTTPS'], но и $_SERVER['HTTP_X_FORWARDED_PROTO'], который доступен на много чаще в не совсем верных конфигурациях.

Плюс этого способа в том, что в Joomla не нужно включать принудительное использование SSL, ваши пользователи по прежнему могут использовать сайт как по HTTP, так и по HTTPS.
Ещё раз, в настройках Joomla 'Включить SSL' это принудительное включение, т.е. при входе на сайт по HTTP, автоматически все будут перенаправляться на версию сайта с использованием HTTPS.
Ссылки на статический контент (картинки, css, js) должны формироваться правильно без этого параметра. Но Joomla должна верно определять что сейчас работает через HTTPS.

Использованы материалы:
anikin.pw
issues.joomla.org

Комментарии  

Серж
+1 #3 Серж 05.07.2017 02:55
в Joomla 3.x файлы includes/define s.php и /administrator/includes/define s.php
Цитировать
Александр
+1 #2 Александр 31.01.2017 14:19
if (!empty($_SERVE R['HTTP_X_FORWA RDED_PROTO']) && $_SERVER['HTTP_ X_FORWARDED_PRO TO'] == 'https' || !empty($_SERVER ['HTTP_X_FORWAR DED_SSL']) && $_SERVER['HTTP_ X_FORWARDED_SSL '] == 'on') {
$_SERVER['HTTPS '] = 'on';
}
Цитировать
Александр
+3 #1 Александр 31.01.2017 14:18
Проблема циклической переадресации возникает в том случае, если сервер при заходе по https не устанавливает переменную $_SERVER['HTTPS '] = 'on';
Решить эту проблему можно не трогая код движка, достаточно вписать в файлы /defines.php и /administrator/ defines.php (если их нет, то создать) следующий код:
Цитировать

Добавить комментарий


Защитный код
Обновить