2

CodeIgniter (複数の開発者によって時間をかけてアップグレードされた古いバージョン) を使用する Web サイトがあります。サイトは HTTP を使用して 100% 正常に動作します (私のテスト環境では HTTPS を使用できません) が、HTTPS に切り替えるとすべての CSS 背景画像が IP アドレスの使用に切り替わりますか?

背景画像がありません   CSS は IP アドレスを使用しています

すべてのページに、使いやすいように次のスニペットを含めていますが、同じ 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>

Site_url() は IP アドレスを返しています

変更をテストするための「ライブテスト環境」がなく、困惑しています。以下のオーバーライドされた関数force_ssl()が問題を抱えている可能性があると思いますが、問題の原因や原因がわかりません。(force_ssl()関数はhereから来ました。)

CodeIgnitercarabinerプラグインを使用して CSS/JS を提供しており、次の関数を使用して SSL/HTTPS を強制していますmy_helper.php

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()機能の何が問題になっていますか?

4

2 に答える 2

1

問題がこれらの機能に関連しているかどうかはわかりません。彼らは構成からデータを取得していますbase_url。base_url が設定されていない場合、Codeigniter はドメイン/IP を取得するために使用するためthe protocol, domain and path to your installation.、サーバーのセットアップの問題であると推測します。$_SERVER['HTTP_HOST']

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);
}
于 2013-09-25T18:19:30.767 に答える
1

問題は私の CSS 拡大の一部であることが判明しました (CodeIgniter フォルダーの再構成を可能にするために以前に変更されていました)。

codeigniter Carabiner プラグインの使用 - cssmin.php が問題のファイルでした.... https://github.com/tonydewan/Carabiner

于 2013-09-26T01:17:42.847 に答える