Плагин «HTTPS Detect» (обновление 09.03.2014)
Описание
Плагин отслеживает схему, использованную пользователем для входа на сайт (HTTP или HTTPS) и корректирует значения "$config['path']['root']['web']" и "$config['path']['static']['root']", ссылки на JS и CSS файлы, ссылки на аватары и фотографии пользователей, ссылки на изображения в фотосете, а также ссылки на изображения и видео в тексте топиков, комментариев и т.д.
Тестовый сайт: http://ls.wasja.info, https://ls.wasja.info
GitHub: github.com/wasja1982/livestreet_httpsdetect
Настройка
Настройка плагина осуществляется редактированием файла "/plugins/httpsdetect/config/config.php".
Поддерживаемые директивы:
1) $config['correct_js_link'] — Обрабатывать ссылки на JS-файлы. По умолчанию включено (true).
2) $config['correct_css_link'] — Обрабатывать ссылки на CSS-файлы. По умолчанию включено (true).
3) $config['correct_img_src'] — Обрабатывать ссылки на изображения в тексте. По умолчанию включено (true).
4) $config['correct_video_src'] — Обрабатывать ссылки на видео в тексте. По умолчанию включено (true).
5) $config['separate_path'] — Использовать отдельный путь для хранения JS и CSS файлов HTTPS протокола. По умолчанию отключено (false).
Обработка ссылок на изображения и видео в тексте осуществляется:
- в тексте топиков;
- в тексте комментариев;
- в тексте статических страниц (плагин «Static Page»);
- в описании блога;
- в сообщениях;
- в записях на стене;
- в информации пользователей «О себе».
Установка
1. Скопировать плагин в каталог /plugins/
2. Через панель управления плагинами (/admin/plugins/) запустить его активацию.
При использовании перед Apache в качестве frontend сервера nginx необходимо добавить в его конфигурацию строку
proxy_set_header X-Forwarded-Proto $scheme;
Известные проблемы
1. При заходе по HTTPS не загружаются файлы в фотосете (с использование SWF-загрузчика). Причина в самом загрузчике, который не работает по HTTPS протоколу. Решение: не использовать загрузчик.
2. При использовании шаблона «Synio» идет загрузка Google-шрифтов по HTTP протоколу. Решение:
— в файле "/templates/skin/synio/header.tpl" удалить строку
<link href='http://fonts.googleapis.com/css?family=PT+Sans:400,700&subset=latin,cyrillic' rel='stylesheet' type='text/css'>
— в файле "/templates/skin/synio/settings/config/config.php" добавить в массив
$config['head']['default']['css'] = array( ... );
строку
"http://fonts.googleapis.com/css?family=PT+Sans:400,700&subset=latin,cyrillic" => array('merge'=>false),
3. При использовании плагина «Gravatar» аватары всегда загружаются по HTTP протоколу. Решение: заменить в файле "/plugins/gravatar/classes/modules/gravatar/entity/User.entity.class.php" строку
return "http://www.gravatar.com/avatar/".md5(strtolower($this->getMail())).".png?size=".$iSize;
на строку
return (Config::Get('plugin.httpsdetect.https') ? "https" : "http") . "://www.gravatar.com/avatar/".md5(strtolower($this->getMail())).".png?size=".$iSize;
Изменения
1.0.1 (09.03.2014)
— Исправлены ошибки.
— Добавлен параметр $config['correct_video_src'] — Обрабатывать ссылки на видео в тексте.
— Добавлена коррекция параметра конфигурации 'path.static.root'.
— Добавлена поддержка плагина «Domain for static».
102 комментария
Эту проблему надо решать в корне, а не отдельным плагином, но хорошо что начали мыслить в этом направлении. Плюс заслуженный.
livestreet.ru/
Вообще корень проблемы в том как LS работает с изображениями. Хранить, конечно, нужно относительные пути — это бы сняло целую пачку проблем. И с CDN, и с переходом на другой домен и с вот с HTTPS. в Alto вроде продвинулись в этом направлении дальше.
Самое веселое, что если заменить в БД полные пути на относительные — все очень даже отображается.
Хотя, этот вопрос надо проверять на реальных сайтах, но негде. А на локалке у меня только Apache.
1) $_SERVER['HTTP_SCHEME'] == 'https'
2) $_SERVER['HTTPS'] != 'off'
3) $_SERVER['SERVER_PORT'] == 443
Без Apache достаточно будет добавить в конфигурации NGINX что-то подобное и должно работать:
А вот с Apache другого пути похоже нет кроме
Проверка на порт 443 — это совсем НЕ ВЕРНО в случае X-Forwarded-Proto :)
На самом деле вообще не верно в общем случае.
Зачем?
ошибка с js яндекс вызывает https но можно залить фаил на комп и проблемы не будет
ошибка шрифтов гугл хром, тоже надо залить себе на сайт и подключить через конфиг
ошибка фаерфокс, не изучена, до сих пор понять не могу
Есть 1 плюс если сайт был запушен, хоть 1 раз через https то http полностью работает
можете это проверить и поменять в конфиге http на https. При выключение браузера все сбрасывается и нужно снова входить в https, для отображение http
надеюсь помог улучшить бетку
Но я работаю над этим вопросом.
Но в шаблоне Synio необходимо немного подкорректировать не совсем корректную загрузку CSS.
2) Добавлено исправление ссылок на изображения в фотосете.
Остается только ссылки на изображения в тексте топиков. Самое простое решение — парсинг текста топика и замена ссылок в тексте — мне не нравится, поскольку создаст дополнительную нагрузку при формировании страниц. Но альтернативы пока не вижу.
может сделать, чтобы картинки загружались только через http даже если загрузил с https или так не как.
Это не настолько ресурсоемкая операция — замена текста в памяти. Работа с БД(которой до черта при отображении топика) намного хуже, например. С умом если сделать разницы в производительности и не заметит никто.
И линки в комментариях тоже.
Ну и потом, если всё равно линки надо менять — то уж всё сразу :)
Думаю, достаточно будет перекрыть функцию чтения из БД. Тогда и кеширование родное будет работать.
Вставляется в метод Parser модуля Text перед return.
Что делает: после прохода всех стандартных парсеров/обработчиков на исходным текстом находит теги с атриббутами href and src и, если домен совпадает с path.root.web, вырезает его.
Вырезается только домен 2-го уровня. Например: site.ru/ заменится на /, site.ru/livestreet заменится на /livestreet.
Результат: в БД пишутся тэги с относительныи путем.
Например: основной домен
Исходный текст:
Cоответственно в БД попадет:
Я считаю, что в рамках данного плагина правильнее исправлять только:
1) ссылки, которые генерируются на лету (на базе path.root.web) — сделано;
2) фиксированные ссылки на картинки (для фотосета) — сделано;
3) фиксированные ссылки на аватары и фотографии пользователей — сделано;
4) ссылки изображения в тексте топиков и комментариев.
А вот ссылки в тексте должны оставаться неизменными.
И идейно правильно разруливать доступ к ресурсам через http или https на уровне сервера/реверс-прокси, а не на php.
Если в базе относителые пути — это решает эту проблему.
А где оно надо? О! Очень клёвый вопрос в контексте LS. Ибо очень мало где. Какой смысл шифровать, например, публично всем доступную заметку? — а никакого смысла.
Фактически во всем LS есть буквально несколько мест где HTTPS действительно нужен — логин, регестрация, редактирование личных данных в профайле… и всё.
Во всех остальных случаях пользователя даже стоит заворачивать с HTTPS на HTTP путём HTTP 301. Чтобы даже не пытался шифроваться там где это не надо. Но сделать это очень не просто, конечно.
— в тексте топиков;
— в тексте комментариев;
— в описании блога;
— в сообщениях;
— в записях на стене;
— в информации пользователей «О себе».
P.S мобильный шаблон
Пару дней на тестирование всем желающим и добавлю в каталог.
Кстати Wasja может кешированние JS и CSS файлов сохраняеть, так
просто это по технологии движка лучше будет.
Если человек сделает 2 шаблона, все пойдет в папку https.
Например плагин мобильная версия и обычный шаблон, взаимодействие пойдет в 1 папку https
Просто это самый простой и наименее влияющий на код вариант.
По идеи кешированние создает рандомное названия файлов. Разве есть совпадение что два файла будут с одинаковым названием?
Но, вообще возможен вариант, когда будут подключатся только CSS или JS файлы с абсолютными путями. В этом случае имена файлов для HTTP и HTTPS совпадут, а содержимое (при наличии ссылок на изображения) будет различаться.
В принципе могу сделать в качестве опции.
по идеи должно все работать и без лишних папок https
— Добавлена обработка изображений в тексте статических страниц (плагин «Static Page»).
А что это за плагин? («Static Page»)
Для создания статических страниц.
Если использовать чат disqus.com/ переходя с http на https у вас будут 2 разных чата от disqus, я предполагаю, что с чатом вк и фейсбук будет тоже самое, хотя сам не проверял.
И думаю исправить такое нельзя не как, суть в том что скрипт берет url сайта, если же протокол http меняется на https, это значит другой URL
Проверить негде.
У меня не хочет, не через кнопку, ни в iframe.
Пока доступно только на GitHub.
— Добавлена поддержка плагина «Domain for static».
Версия 1.0.1 отправлена на модерацию.
ну это бредовая идея, удалять строку, если ее можно просто привести в https
это вот http умею грузить файлы с https а вот https увы не может этого делать
Но проблема как его активировать? Если я немогу залогинеться из-за http
Скажите (я знаю что оно не поддерживаеться больше aceAdminPanel v.2.0.392)
Но как пофиксить ошибку с вашим плагином? Чтобы не ругался
То ошибки и в одном плагине и в другом, хотелось просто ясности, в моих руках проблема либо правда нету совместимости.