Хочу чтоб при обращению к странице по https, также все внутренние линки были изменены на варианты с https.
Из-за того что view страницы загружается с разными url, относительные пути не подходят (js/script.js) и можно использовать функцию base_url (echo base_url().’js/script.js’), но дело в том что ее значение статично, так как она берет его из $config['base_url'].
Как вариант решения, динамический базовый путь в $config['base_url']. Дополнительным плюсом будет то, что отпадет необходимость изменять base_url при переносе файлов между доменами.
Оптимальным решением будет добавление этих изменений сразу в файл system/config/config.php
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
Есть и более сложный вариант:
/* Detect ssl connectivity */
if ( isset($_SERVER['HTTPS']) ) {
$ssl = $_SERVER['HTTPS'];
}elseif ( isset($_SERVER['HTTP_FRONT_END_HTTPS']) ) {
$ssl = $_SERVER['HTTP_FRONT_END_HTTPS'];
}else {
$ssl = "OFF";
}
$root = (stripos($ssl, "ON") !== FALSE) ? "https" : "http";
/* Many pages/apps served through the same domain */
if ( isset($_SERVER['HTTP_X_FORWARDED_HOST']) ) {
list($host) = explode(',', str_replace(' ', '', $_SERVER['HTTP_X_FORWARDED_HOST']));
} else {
$host = $_SERVER['HTTP_HOST'];
}
$root .= "://".$host;
if ( ! isset($_SERVER['ORIG_script_NAME']) ) {
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
}
else {
$root .= str_replace(basename($_SERVER['ORIG_SCRIPT_NAME']),"
",$_SERVER['ORIG_SCRIPT_NAME']);
}
$config['base_url'] = "$root";
ps: Проблема с http и https решается гораздо проще установкой $config['base_url'] = ‘//example.com/’.
Неплохим решением также, будет создать library или подредактировать helper url, добавить туда свою функцию для получения урла, или схемы (протокола)