ZhdanovTM Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 Скажите, как через переопределить значение отдающее сервером в шаблонах<base href="{$config->root_url}/"/>Проблема с httpS. Хостинг отдаёт значение {$config->root_url} вида http://site.ru ,мне необходимо сделать https://site.ruКак? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 у вас в корневом .htaccess установлено правило для ssl? чтобы пользователь заходя через http перенаправлялся на защищенное соединение? Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 5 января, 2016 Автор Жалоба Поделиться Опубликовано 5 января, 2016 у вас в корневом .htaccess установлено правило для ssl? чтобы пользователь заходя через http перенаправлялся на защищенное соединение?Правило, конечно же, установлено, что и удивляет.. При переходе по ссылке https://site.ru всё равно отдаёт в шаблон http://site.ru Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 Правило, конечно же, установлено, что и удивляет.. При переходе по ссылке https://site.ru всё равно отдаёт в шаблон http://site.ru установите принудительно https, в api/Config.php удалите или лучше закомментируйте $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) чтобы остался только $protocol = 'https'; Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 5 января, 2016 Автор Жалоба Поделиться Опубликовано 5 января, 2016 установите принудительно https, в api/Config.php удалите или лучше закомментируйте $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) чтобы остался только $protocol = 'https'; Благодарен за оперативный ответ. Всё работает! Большое спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 5 января, 2016 Автор Жалоба Поделиться Опубликовано 5 января, 2016 установите принудительно https, в api/Config.php удалите или лучше закомментируйте $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) чтобы остался только $protocol = 'https'; Михаил, а сталкивался с проблемой, когда на хостинге галочка "Использовать безопасное соединение SSL прожата, редирект каталогов работает, а файлов нет." http://site.ru/direct переадресовывает на https://site.ru/directа http://site.ru/direct.JPG НЕ переадресовывает на https://site.ru/direct.JPG Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 Михаил, а сталкивался с проблемой, когда на хостинге галочка "Использовать безопасное соединение SSL прожата, редирект каталогов работает, а файлов нет." http://site.ru/direct переадресовывает на https://site.ru/directа http://site.ru/direct.JPG НЕ переадресовывает на https://site.ru/direct.JPG вообще должны быть, в настройках там отдает $this->config->root_url, что должно отдавать https Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 5 января, 2016 Автор Жалоба Поделиться Опубликовано 5 января, 2016 вообще должны быть, в настройках там отдает $this->config->root_url, что должно отдавать httpsНе пойму. То есть то же можно через API принудительно сделать? Буду пробовать. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 Не пойму. То есть то же можно через API принудительно сделать? Буду пробовать. туда уже передается юрл с вашим $protocol = 'https'; это что-то другое Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 5 января, 2016 Автор Жалоба Поделиться Опубликовано 5 января, 2016 туда уже передается юрл с вашим $protocol = 'https'; это что-то другое.htaccess стандартный. Недоработка хостинга. На SEO влияет однозначно, хотелось бы закрыть дыру. Цитата Ссылка на сообщение Поделиться на другие сайты
osben Опубликовано 5 января, 2016 Жалоба Поделиться Опубликовано 5 января, 2016 Скорее всего стоит у Вас Nginx в качестве отдачи статики, а редирект для апача делаете. // Протокол $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) $protocol = 'https'; elseif (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) $protocol = 'https'; elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') $protocol = 'https'; $this->vars['protocol'] = $protocol; ето должно профиксить в вашем случае и в большинстве других. ето что касается автоматического определение протокола. Что касается же редиректа то тут все сложнее, настоятельно рекомендую сначала написать в сапорт, может какой то костыль Вам предложат на опыте (по своему хостингу) Цитата Ссылка на сообщение Поделиться на другие сайты
ZhdanovTM Опубликовано 6 января, 2016 Автор Жалоба Поделиться Опубликовано 6 января, 2016 Скорее всего стоит у Вас Nginx в качестве отдачи статики, а редирект для апача делаете. // Протокол $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) $protocol = 'https'; elseif (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) $protocol = 'https'; elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') $protocol = 'https'; $this->vars['protocol'] = $protocol; ето должно профиксить в вашем случае и в большинстве других. ето что касается автоматического определение протокола. Что касается же редиректа то тут все сложнее, настоятельно рекомендую сначала написать в сапорт, может какой то костыль Вам предложат на опыте (по своему хостингу)Все так и оказалось. Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Столкнулся с подобной проблемой, может подскажете? В общем ситуация такая - есть сайт, для приема платежей недавно установили SSL-сертификат. Требования - чтобы сайт был доступен и по HTTP и по HTTPS, т.к. сайт давно проиндексирован и имеет не плохие позиции в поиске, и мы не хотим отказываться от http версии, и в тоже время нужна https версия для приема платежей через яндекс кассу для юрлиц. Т.е. если человек заходит на http версию и начинает переходить по ссылкам на сайте - надо чтобы он и остался на ней, и наоборот, если человек заходит на https версию и начинает переходить по ссылкам, он также и остается на https страницах. Версия simpla 2.2.4Если не вносить никаких изменений в файл /api/Config.php, то получается что http версия работает без проблем, а https версия не работает как надо, не подгружаются стили, скрипты, так как к ним адрес автоматически прописывается не через https а через http Браузер ругается, что на странице обнаружен небезопасный контент. Пробовал сделать так - удалить с файла /api/Config.php следующие строки: $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) и оставить только $protocol = 'https'; тогда получается что если пользователь зашел на http версию, при переходе по ссылкам на сайте его все равно перекинет на https. Цитата Ссылка на сообщение Поделиться на другие сайты
Kniazdiit Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Делайте редирект со всех страниц с http на соответствующие https Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Делайте редирект со всех страниц с http на соответствующие httpsНафига? Цитата Ссылка на сообщение Поделиться на другие сайты
Kniazdiit Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Нафига?Работать сайт будет только на защищенном HTTPS, старый вес страниц не потеряется, а в скриптах нужно будет путь подправить, чтобы тоже https брал и всё. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 А ничего, что вопрос был не про это? А совсем наоборот? Цитата Ссылка на сообщение Поделиться на другие сайты
simplashop Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Нужно проверить подключение скриптов и стилей. внешние скрипты, например jquery может подключаться извне - в самом подключении нужно поменять протокол с http на https.так же можно проделать манипуляции, описанные товарищем osben для того, чтобы нормально прогружались локальные стили и скрипты.Так же поддержу Kniazdiit - если уж раскошелились на сертификат, то используйте для просмотра вашего сайта протокол https - не зря их все таки придумывали. редирект с незащищенного протокола на защищенный не нанесет раскрутке существенного вреда, однако нужно проследить, чтобы сайт отображался корректно - на это поисковики нынче смотрят Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Нужно проверить подключение скриптов и стилей. внешние скрипты, например jquery может подключаться извне - в самом подключении нужно поменять протокол с http на https. так же можно проделать манипуляции, описанные товарищем osben для того, чтобы нормально прогружались локальные стили и скрипты. все скрипты и стили подключены локально. Заметил одну особенность Если в этом коде (config.php) всё убрать: // Протокол $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) $protocol = 'https'; $this->vars['protocol'] = $protocol; $this->vars['root_url'] = $protocol.'://'.rtrim($_SERVER['HTTP_HOST']); if(!empty($subdir)) $this->vars['root_url'] .= '/'.$subdir; и оставить только первую строчку: // Протокол $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; То всё работает как мне нужно - полноценно работает версия с https и http, и вроде бы всё хорошо, но пропадает переменная root_url Я заметил что она используется в шаблоне в нескольких местах, например в шаблоне e-mail письма покупателю: Вы всегда можете проверить состояние заказа по ссылке:<br> <a href="{$config->root_url}/order/{$order->url}">{$config->root_url}/order/{$order->url}</a> Здесь я могу жестко прописать адрес сайта и проблем не будет. Также синий ярлычок переключения между админкой и сайтом перестал работать. Судя по коду выше нужно как-то по-другому написать переменную $protocol и всё должно заработать, но может я ошибаюсь. Может что-нибудь предложите? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 Попробуйте убрать только if($_SERVER["SERVER_PORT"] == 443) $protocol = 'https'; Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 11 января, 2016 Жалоба Поделиться Опубликовано 11 января, 2016 пробовал, не помогает, http работает нормально, https - не грузит стили и скрипты, т.к. адрес их прописывется через http Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 (изменено) просто не хочется полностью переводить сайт на https. получается, в этом коде: $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http'; if($_SERVER["SERVER_PORT"] == 443) $protocol = 'https'; $this->vars['protocol'] = $protocol; $this->vars['root_url'] = $protocol.'://'.rtrim($_SERVER['HTTP_HOST']); if(!empty($subdir)) $this->vars['root_url'] .= '/'.$subdir; если оставить только первую строчку - всё работает как мне нужно, но теряется root_url.Жаль что я в php ничего не смыслю, но если сделать так? Например 1) Узнаем SERVER_PROTOCOL, - если он = https - переменной $protocol присваеваем https,если он = http - переменной $protocol присваеваем http,Ну и потом подставляем её в root_urlМожет конечно я пургу несу, но всё же Изменено 12 января, 2016 пользователем simpler Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 (изменено) Всем откликнувшимся большое спасибо! Проблема решилась сама собой.Сам сглупил, в общем для приема платежей яндексом нужен доступ по https только к файлу:https://sitename.ru/payment/YandexMoney/callback.phpа с ним проблем нет, он нормально по https работает со стандартными настройками. Единственное - осталось закрыть от индексации не красивую версию https.Пробовал создавать второй файл robots-https.txt и через htaccess писать RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^robots\.txt$ robots-https.txt Не помогает, игнорируется {HTTPS} т.е. если зайти по адресу:https://sitename.ru/robots.txt показывает обычный robots.txt, а не перебрасывает на robots-https.txt Изменено 12 января, 2016 пользователем simpler Цитата Ссылка на сообщение Поделиться на другие сайты
simplashop Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 можно сделать редирект с https на http кроме папочки payment Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 12 января, 2016 Жалоба Поделиться Опубликовано 12 января, 2016 можно сделать редирект с https на http кроме папочки payment согласен, хорошее решение! не подскажите как это прописать в htaccess? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.