В связи со скорым выходом 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)
    Заменяем
1
2
3
4
5
6
7
8
if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off'))
{
$https = 's://';
}
else
{
$https = '://';
}

на

1
2
3
4
5
6
7
8
if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off'))
{
$https = 's://';
}
else
{
$https = 's://';
}

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

Рекомендую для начала почитать статью

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

Но если хостер не ведётся на ваши уговоры, или у вас что-то ещё не получается, можно изменить всё тот же uri.php, но несколько иным способом.
Находим код и комментируем его, в начале строки поставив два слеша ‘//’.

1
if ((isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')))

Строкой ниже добавляем строки

1
2
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