Magento CSS图像指令和CDN冲突

时间:2011-11-14 22:15:25

标签: css cdn magento

我在这里看到一些关于CSS中相对图像路径问题的帖子,当CSS在CDN中托管时,CSS无法正常工作,但我遇到了无法找到答案的情况。在我们的Magneto商店中,我们启用了合并CSS 功能。不幸的是,在Magento中,当您执行此操作时,它会将它们合并到媒体文件夹中的单个文件,而不是皮肤文件夹。所以现在,图像的相对路径不起作用。当Magento无法在非安全URL中找到资源时,会尝试使用安全URL。在我们的例子中,我们不将CDN用于安全页面,因此它可以使用安全URL来查找图像。这在技术上有效,但我们的网站返回图像比CDN慢,我真的想解决这个问题。没有经过所有的CSS精灵,要么将CDN URL硬编码为图像路径(不受欢迎的),要么一起删除CSS指令,并在模板文件中调用getSkinUrl()包含有问题的元素(略微不受欢迎的),我对如何解决这个问题感到茫然。当然有人之前遇到过这个问题。关于如何解决这个问题的任何建议或想法?

谢谢!

2 个答案:

答案 0 :(得分:2)

实际问题与CDN或与图像相关的合并CSS文件的位置无关。 Magento实际上做了很酷的事情......它解析CSS文件并用完整的URL填充所有相对URL。它在Mage_Core_Model_Design_Package方法的_prepareUrl类中执行此操作。它确定是否在以下行中使用安全URL或非安全URL:

$secure = $store->isAdmin() ? $store->isAdminUrlSecure() : $store->isFrontUrlSecure();

这里的问题是,即使相关页面实际上不安全,它也会使用安全的URL。如果在前端使用安全网址,则不会始终使用安全网址。它仅在客户帐户页面和购物车/结帐时使用它们。任何其他页面都不安全,不需要安全资源。

合并网址时,Magento很聪明,因为它会在css文件夹下创建css_securemedia文件夹。您会注意到,如果您查看客户帐户页面的来源,它正在从css_secure文件夹中提取CSS,但在主页上它会使用css文件夹。因此,它已经设置为了解安全和非安全页面之间的区别,但CSS的合并并没有考虑到这一点。

为了解决这个问题,我做了一个基本的扩展,用新的core/design_package方法重写_prepareUrl模型。唯一的区别是,在上面提到的这一行之后我添加了这个:

$secure = $secure && Mage::app()->getRequest()->isSecure();

这可确保只有css_secure文件夹中的合并css文件才能获得资源的安全URL。

希望这可以帮助任何有类似问题的人。

答案 1 :(得分:0)

自己将CSS文件合并为一个并更改标题xml以仅提取这个css文件。然后CSS应该能够与您的图像一起生活在CDN上。我知道这不是一个非常奇特的解决方案,但无论如何它可能值得归结为一个CSS文件(每个主题)。