更改Drupal 7编译的css和js包括使用https而不是http

dan*_*des 2 html css php drupal drupal-7

在Drupal 7中,编译在一起然后添加到标题中的css和javascript文件将以" http://www.example.com/sites/all/css "形式出现,我需要将其作为' https: //www.example.com/sites/all/css '.

我已经能够通过将settings.php中的baseUrl更改为使用https来实现此目的,但随后它会抛弃我们的网站.我们使用Drupal作为我们的CMS,使用另一个框架作为我们的LMS.因此,当站点从我们的LMS加载Drupal baseUrl时,该地址不起作用.

例子:

如果我设置baseUrl =' https: //www.example.com/cms ',则css正确加载为' https://www.example.com/cms/sites/all/css ',但Drupal管理站点失败加载css,因为那里的正确链接实际上是' https://www.example.com/drupal/sites/all/css '

如果我将baseUrl交换为=' https: //www.example.com/drupal,则会出现同样的问题.这样css不会在我们的前端加载,但在Drupal管理员端正常工作.

我想知道是否有办法做一个通用的通配符baseUrl,只是说使用https,如baseUrl ='https://%'或每次都在地址栏中拉出当前的url,看看生成的url应该是什么样的喜欢.

我知道这很模糊,但我不知道在哪里/怎么问.

Mik*_*ckx 7

我不太了解您使用多个子目录(/,/ drupal,/ cms)的站点结构,但您可以做的是重写资源URL并删除协议.

在自定义模块中,实现YOUR_MODULE_process_html钩子并从CSS和JS中删除所有协议.

http://www.example.com/css/... 将转变为 //www.example.com/css/...

function YOUR_MODULE_process_html(&$vars)
{
    foreach (array('head', 'styles', 'scripts') as $replace) {
        if (!isset($vars[$replace])) {
            continue;
        }

        $vars[$replace] = preg_replace('/(src|href|@import )(url\(|=)(")http(s?):/', '$1$2$3', $vars[$replace]);
    }
}
Run Code Online (Sandbox Code Playgroud)