Связаться со мной:

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

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

Петр Аникин

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

310

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

Миха

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

Александр

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

Антон

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

Петр Аникин

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

Дмитрий

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

Владимир

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

Петр Аникин

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

Владимир

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

Петр Аникин

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

Владимир

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

Петр Аникин

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

Владимир

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

Петр Аникин

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

Владимир

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

Петр Аникин

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

Владимир

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

Владимир

Я нашел другой способ, без правки файла 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.

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

Антон

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

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

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

Антон

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

Антон

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

Популярное