【问题标题】:HTTPS background images using ip address?使用 IP 地址的 HTTPS 背景图像?
【发布时间】:2013-09-25 15:56:32
【问题描述】:

我有一个使用 CodeIgniter 的网站(一个较旧的版本,随着时间的推移已被多个开发人员升级)。该网站使用 HTTP 可以 100% 正常运行(我的测试环境不能使用 HTTPS),但是当我切换到 HTTPS 时,所有 CSS 背景图像都会切换到使用 IP 地址?

在每一页中,我都包含以下 sn-p 以方便使用,但它产生的 IP 地址相同,所以我认为问题出在 site_url() 函数中 - image_url() 只是添加到 site_url()

<script type="text/javascript">
    var BASE_URL = '<?= site_url() ?>'; // http://555.555.55.555/
    var IMG_PATH = '<?= image_url() ?>'; // http://555.555.55.555/images/main
</script>

我没有“实时测试环境”来测试更改,我很困惑。我相信下面被覆盖的函数force_ssl() 可能存在问题,但不知道为什么或是什么导致了问题。 (force_ssl() 函数来自here。)

我正在使用 CodeIgniter carabiner 插件来提供 CSS/JS 并具有以下功能以在我的 my_helper.php 中强制使用 SSL/HTTPS:

if (!function_exists('force_ssl')) {
    function force_ssl() {
        if (ENVIRONMENT != 'development') {
            $CI = & get_instance();
            $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']);
            if ($_SERVER['SERVER_PORT'] != 443) {
                redirect($CI->config->config['base_url'] . $CI->uri->uri_string());
            }
        }
    }
}

/**
 * Override the site_url function so it does https
 *
 * @param <type> $uri
 * @return <type>
 */
function site_url($uri = '', $https = FALSE, $only_images_js_css = true) {
    if ($https || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443)) {
        if (ENVIRONMENT != 'production') {
            $secure_connection = FALSE;
        } else {
            $secure_connection = TRUE;
        }
    } else {
        $secure_connection = FALSE;
    }

    $CI = & get_instance();
    if (!$secure_connection) {
        return str_replace("https://", "http://", $CI->config->site_url($uri));
    } else {
        // fallback - .htaccess should cover this - but just to make sure...
        // If we only want the images, js, css, etc. to have https://
        if ($only_images_js_css === true) {
            $needs_ssl = false;
            $extensions_to_check = array(".js", ".css", ".jpg", ".gif", ".png", ".ico");
            foreach ($extensions_to_check as $extension_to_check) {
                if (stristr($uri, $extension_to_check) !== FALSE) {
                    $needs_ssl = true;
                    break;
                }
            }
            if ($needs_ssl === true) {
                return str_replace("http://", "https://", $CI->config->site_url($uri));
            } else {
                return str_replace("https://", "http://", $CI->config->site_url($uri));
            }
        } else {
            return str_replace("http://", "https://", $CI->config->site_url($uri));
        }
    }
}

有没有更好的方法来做到这一点? (即从 HTTP 切换到 HTTPS)和/或我的 site_url() 和/或 force_ssl() 函数有什么问题?

【问题讨论】:

    标签: php css ssl https background-image


    【解决方案1】:

    我不确定问题是否与这些功能有关。他们从base_url config 获取数据。如果未设置 base_url,Codeigniter 会尝试猜测 the protocol, domain and path to your installation.,我认为这是服务器设置问题,因为 Codeigniter 使用 $_SERVER['HTTP_HOST'] 获取域/IP。

    if ($this->config['base_url'] == '')
    {
        if (isset($_SERVER['HTTP_HOST']))
        {
            $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
            $base_url .= '://'. $_SERVER['HTTP_HOST'];
            $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
        }
        else
        {
            $base_url = 'http://localhost/';
        }
    
        $this->set_item('base_url', $base_url);
    }
    

    【讨论】:

    • 关于我应该在服务器上寻找什么的任何想法? (我确实转移了服务器,不记得在以前的服务器上发生过这种情况)
    • 这段代码实际上破坏了网站上的所有 SSL - 它很快就被恢复了。
    【解决方案2】:

    问题原来是我的 CSS 放大的一部分(之前已修改为允许重新配置 CodeIgniter 文件夹)

    使用 codeigniter Carabiner 插件 - cssmin.php 是问题文件.... https://github.com/tonydewan/Carabiner

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2021-07-21
      • 1970-01-01
      • 2017-08-16
      • 2021-10-06
      相关资源
      最近更新 更多