2

在 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 应该是什么样子喜欢。

我知道这很模糊,但我不知道在哪里/如何问。

4

1 回答 1

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]);
    }
}
于 2013-10-06T09:19:03.547 回答