Фактическая проблема не имеет ничего общего с CDN или расположением объединенных CSS-файлов по отношению к изображениям. Magento действительно делает что-то классное ... он анализирует CSS-файлы и заполняет все относительные URL полными URL. Это делается внутри класса Mage_Core_Model_Design_Package
в методе _prepareUrl
. Он определяет, использовать ли безопасный URL-адрес или незащищенный URL-адрес в следующей строке:
$secure = $store->isAdmin() ? $store->isAdminUrlSecure() : $store->isFrontUrlSecure();
Проблема здесь в том, что он будет использовать безопасный URL, даже если рассматриваемая страница на самом деле не безопасна. Если у вас используется безопасный URL-адрес во включенном веб-интерфейсе , он не будет использовать безопасные URL-адреса все время. Он использует их только на страницах учетной записи клиента и в корзине / оформить заказ. Любая другая страница не является безопасной и не нуждается в защищенных ресурсах.
При объединении URL-адресов Magento умен, поскольку создает папку css
и css_secure
в папке media
. Вы заметите, если вы просматриваете источник страницы учетной записи клиента, что он вытягивает CSS из папки css_secure
, но на домашней странице он использует папку css
. Таким образом, он уже настроен на то, чтобы знать разницу между безопасными и незащищенными страницами, но при объединении CSS это не учитывается.
Чтобы исправить это, я сделал базовое расширение, чтобы переписать модель core/design_package
новым методом _prepareUrl
. Разница лишь в том, что сразу после указанной выше строки я добавил следующее:
$secure = $secure && Mage::app()->getRequest()->isSecure();
Это гарантирует, что только объединенные CSS-файлы в папке css_secure
получают защищенные URL-адреса для ресурсов.
Надеюсь, это поможет любому с подобной проблемой.