Rose debug info
---------------

Joomla 2.5 с SSL(https), решение проблемы с циклической переадресацией.

Веб-сервер nginx установлен фронтэндом к apache2. Клиент установил ssl-сертификат на домен, но при включении в джумле ssl возникает ошибка: циклическая переадресация. Грубо говоря бесконечный редирект. Проверил настройки nginx и apache2, убедился что все настройки верные и переадресации быть не должно. В .htaccess тоже ничего лишнего нет.

Стандартно настраиваю ssl на джумле.
Открываю файл configuration.php в корне сайта. Привожу следующие диррективы к такому виду:

.....
public $live_site = 'https://ваш_домен.ru';
.....
public $force_ssl = '2';
.....

Для редиректа с http на https в .htaccess добавляю

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

После этого проблема переадресации никуда не исчезла, естественно. Решение было найдено на англоязычном форуме джумлы. Чтобы исправить её нужно открыть файл ./libraries/joomla/environment/uri.php.(В joomla 3.4 этот файл находится ./libraries/joomla/uri) Найти там код:

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://';
}
Поделиться
Отправить
23 комментария
dem0ngerman 2015

Уважуха. Тебе чувак! Один символ решает столько проблем! На joomla 3.4 тем же решилось, только файл лежит в /www/site.com/libraries/joomla/uri

Петр Аникин 2015

Не за что. Рад что помог. Добавил пояснение про joomla 3.4 в статью, спасибо за комментарий.

310 2015

Красавчик))
Мне тоже помог!

Миха 2015

Присоединяюсь, спасибо!

Александр 2016

Большущее спасибо, такой косяк и исправить не могут

Антон 2016

Спасибо, дружище! От души душевно в душу прям. Я хостера мучил неделю с этим вопросом, ночами не спал, похудел нервным стал. В итоге только твой совет помог.

Петр Аникин 2016

Рад что помог. Тебе и всем вышеотписавшимся спасибо за комментарии. Обращайтесь.

Дмитрий 2016

Весь интернет облазил, никак не мог найти путь до файла. Спасибо тебе

Владимир 2016

А ссылки по http никуда не деваются, они так же доступны.

Петр Аникин 2016

Значит вы не правильно прописали редирект с http на https. Все ссылки http должны автоматически переадресовываться на https.

Владимир 2016

Все я прописал правильно, в моем случае ваша схема не работает.

Петр Аникин 2016

Можете подробнее описать?

Владимир 2016

Решил вопрос, поддержка хостинга помогла, немного подправили указанный вами редирект в .htaccess.

Петр Аникин 2016

Я рад что у вас все получилось. И был бы очень рад если бы вы описали подробнее что у вас была за проблема, возможно будущим читателям этой статьи это поможет. Вы можете написать мне на почту petr@anikin.pw и я добавлю в статью ваши замечания.

Владимир 2016

Все хорошо, но как теперь обновляться, во время обновления Joomla исправление файла uri.php сбросится и сайт уйдет в циклическое перенаправление и не факт что Joomla при этом нормально обновится. А если перед обновлением отключить SSL и закомментировать редирект в .htaccess, а после обновления все вернуть обратно и опять поправит uri.php, то все ссылки какое-то время будут доступны по http и могут попасть в поисковики, получаться дубли, что есть плохо. Как быть?

Петр Аникин 2016

Это вопрос к разработчикам джумлы, почему в их програмном продукте присутствуют такие ошибки. Здесь описано только как поправить ошибку если сайт уходит в циклическую переадресацию.

Владимир 2016

Вообще это не ошибка Joomla, она уходит в циклическую перезагрузку только если есть связка Apache+Ngnix, c чистым Apache она работает как положено, проверено и мной и другими людьми. И эта проблема не только у Joomla, а у многих других владельцев различных сайтов. Для ее решения советуется настраивать редирект именно на Ngnix, я сам не пробовал так настраивать, но как нибудь попробую, посмотрю на результат, я имею ввиду попробую на локальном сервере.

Петр Аникин 2016

Если будет не трудно, отпишитесь о результатах.

Владимир 2016

Результатов нет, это лучше пробовать непосредственной на линуксе, а не на windows.

Владимир 2016

Я нашел другой способ, без правки файла uri.php.
Вставляем в .htaccess вот такие строки.

<IfModule env_module>
SetEnv HTTP_PORT 443
SetEnv HTTP_SCHEME https
SetEnv HTTPS on
SetEnv HTTP_HOSTNAME secure.example.com
</IfModule>

example.com соответственно меняем на свой сайт.
Это убирает циклическое перенаправление, но ссылки по http все еще доступны, поэтому их нужно перенаправить, для этого добавляем в файл .htaccess еще такие строки.

RewriteCond %{HTTP:X_FORWARDED_PROTO} !^https$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

Это перенаправление работает на моем сервере, если у кого-то не будет работать, попробуйте другие варианты, их много на просторах интернета или обратитесь к вашему хостеру, пусть он подскажет как лучше сделать такое перенаправление.

И не забудьте включить SSL в админке самой Joomla.

Автору данной статьи.
Добавь этот вариант в статью, потому что проблема актуальная.

Антон 2016

Владимир, спасибо. Обновил joomla до 3.5, и опять встал вопрос с циклическим редиректом. Не трогая uri.php, поправил .htaccess согласно вашему примеру, и все прекрасно заработало.
Еще раз всем спасибо.

Сергей Батурзин 2016

Спасибо мужик, выручил)

Антон 2016

И снова я тут с вами.
Лечение циклической переадресации при подключении ssl это хорошо, но я все же докопался до причины ее возникновения в моем конкретном случае. При подключении SSL сертификата хостер выдает внешний белый ip, и не всегда его автоматически прописывает к вашему домену. В моем случае (хостер timeweb) мне пришлось вручную зайти в настройки домеменов/поддоменов и прописать выданный внешний ip в поле «A запись» для своего домена. Ранее в этом поле стоял ip самого сервера, что и давало проблему с циклическим редиректом. Надеюсь, кому-то мой опыт будет полезен. Всем удачи.

Антон 2016

*Поправка. Я ошибся. До конца проблему это не решило, но убрало из цепочки редиректов 1 звено. Буду дальше копать.

sadas dsdfs 2018

joomla 3.8.5 путь к файлу domain/libraries/src/Uri/Uri.php 77 строка

Алексей 2019

Спасибо! Помогло :)

Виктор 2020

Чувак! God bless you!

Дмитрий Король 2021

Владимир, спасибо. Очень выручил.

Павел Маколов 2022

Респект друг!
У меня началась проблема, после того как хостер начал обновлять php.
Они мне подсказали сделать в configuration.php строку public $live_site = ’https://hzit.ru'; а админка так и не заработала. У меня еще и стоит защита админки от стандартной ссылки входа через плагин, когда добавляется ключ после /administrator. Думал, что плагин лег и теперь не зайти, но ты мне помог!
Кстати у меня единица в строке: public $force_ssl = ’1’; — так работает.

Christina Com 1 год

Помогло! Для Joomla 4 путь /libraries/src/Uri/Uri.php строка 77