Jump to content

<base href="{$config->root_url}/"/>


Recommended Posts

Скажите, как через переопределить значение отдающее сервером в шаблонах
<base href="{$config->root_url}/"/>

Проблема с httpS. Хостинг отдаёт значение {$config->root_url} вида http://site.ru ,
мне необходимо сделать https://site.ru

Как?

Link to post
Share on other sites

у вас в корневом .htaccess установлено правило для ssl? чтобы пользователь заходя через http перенаправлялся на защищенное соединение?

Правило, конечно же, установлено, что и удивляет.. При переходе по ссылке https://site.ru всё равно отдаёт в шаблон http://site.ru

Link to post
Share on other sites

Правило, конечно же, установлено, что и удивляет.. При переходе по ссылке 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';
Link to post
Share on other sites

 

установите принудительно https, в api/Config.php удалите или лучше закомментируйте

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http';
	if($_SERVER["SERVER_PORT"] == 443)

чтобы остался только

$protocol = 'https';

Благодарен за оперативный ответ. Всё работает! Большое спасибо!

Link to post
Share on other sites

 

установите принудительно 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

Link to post
Share on other sites

Михаил, а сталкивался с проблемой, когда на хостинге галочка "Использовать безопасное соединение SSL прожата, редирект каталогов работает, а файлов нет."

 

http://site.ru/direct переадресовывает на https://site.ru/direct

а http://site.ru/direct.JPG НЕ переадресовывает на https://site.ru/direct.JPG

 

вообще должны быть, в настройках там отдает $this->config->root_url, что должно отдавать https

Link to post
Share on other sites

вообще должны быть, в настройках там отдает $this->config->root_url, что должно отдавать https

Не пойму. То есть то же можно через API принудительно сделать? Буду пробовать.

Link to post
Share on other sites

Не пойму. То есть то же можно через API принудительно сделать? Буду пробовать.

 

туда уже передается юрл с вашим $protocol = 'https'; это что-то другое

Link to post
Share on other sites

туда уже передается юрл с вашим $protocol = 'https'; это что-то другое

.htaccess стандартный. Недоработка хостинга. На SEO влияет однозначно, хотелось бы закрыть дыру.

Link to post
Share on other sites

Скорее всего стоит у Вас 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;

ето должно профиксить в вашем случае и в большинстве других. ето что касается автоматического определение протокола. 
Что касается же редиректа то тут все сложнее, настоятельно рекомендую сначала написать в сапорт, может какой то костыль Вам предложат на опыте (по своему хостингу)

Link to post
Share on other sites

Скорее всего стоит у Вас 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;

ето должно профиксить в вашем случае и в большинстве других. ето что касается автоматического определение протокола. 

Что касается же редиректа то тут все сложнее, настоятельно рекомендую сначала написать в сапорт, может какой то костыль Вам предложат на опыте (по своему хостингу)

Все так и оказалось. Спасибо.

Link to post
Share on other sites

Столкнулся с подобной проблемой, может подскажете?

 

В общем ситуация такая - есть сайт, для приема платежей недавно установили 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.

Link to post
Share on other sites

Нафига?

Работать сайт будет только на защищенном HTTPS, старый вес страниц не потеряется, а в скриптах нужно будет путь подправить, чтобы тоже https брал и всё.

Link to post
Share on other sites

Нужно проверить подключение скриптов и стилей. внешние скрипты, например jquery может подключаться извне - в самом подключении нужно поменять протокол с http на https.

так же можно проделать манипуляции, описанные товарищем osben для того, чтобы нормально прогружались локальные стили и скрипты.

Так же поддержу Kniazdiit - если уж раскошелились на сертификат, то используйте для просмотра вашего сайта протокол https - не зря их все таки придумывали. редирект с незащищенного протокола на защищенный не нанесет раскрутке существенного вреда, однако нужно проследить, чтобы сайт отображался корректно - на это поисковики нынче смотрят

 

Link to post
Share on other sites

Нужно проверить подключение скриптов и стилей. внешние скрипты, например 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 и всё должно заработать, но может я ошибаюсь. Может что-нибудь предложите? 

Link to post
Share on other sites

просто не хочется полностью переводить сайт на 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

Может конечно я пургу несу, но всё же

Edited by simpler
Link to post
Share on other sites

Всем откликнувшимся большое спасибо!

 

Проблема решилась сама собой.

Сам сглупил, в общем для приема платежей яндексом нужен доступ по 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

Edited by simpler
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...