我在这里看到了一些关于当 CSS 托管在 CDN 中时 CSS 中的相对图像路径不起作用的问题的帖子,但我遇到了一种情况,我找不到答案。在我们的 Magneto 商店中,我们启用了合并 CSS 功能。不幸的是,在 Magento 中,当您执行此操作时,它会将它们合并到 media 文件夹中的单个文件,而不是 skin 文件夹中。所以现在,图像的相对路径不起作用。当 Magento 在非安全 URL 中找不到资源时,它会尝试使用安全 URL。在我们的例子中,我们不将 CDN 用于安全页面,因此它能够使用安全 URL 找到图像。这在技术上可行,但我们的网站返回图像的速度比 CDN 慢,我真的很想解决这个问题。缺少遍历所有 CSS Sprite 和将 CDN URL 硬编码为图像路径(不可取)或一起删除 CSS 指令并调用 getSkinUrl()
在包含违规元素的模板文件中(稍微不那么令人讨厌),我不知道如何解决这个问题。肯定有人以前遇到过这个问题。关于如何解决此问题的任何建议或想法?
谢谢!
最佳答案
实际问题与 CDN 或合并的 CSS 文件相对于图像的位置无关。 Magento 实际上做了一些很酷的事情……它解析 CSS 文件并用完整的 URL 填充所有的相对 URL。它在 _prepareUrl
方法的 Mage_Core_Model_Design_Package
类中执行此操作。它确定在以下行中使用安全 URL 还是非安全 URL:
$secure = $store->isAdmin() ? $store->isAdminUrlSecure() : $store->isFrontUrlSecure();
这里的问题是它会使用安全的 URL,即使有问题的页面实际上并不安全。如果您启用了在前端使用安全 URL,它不会一直使用安全 URL。它仅在客户帐户页面和购物车/结账时使用它们。任何其他页面都不安全,不需要安全资源。
合并 URL 时,Magento 很聪明,因为它在 media
文件夹下创建了一个 css
和一个 css_secure
文件夹。如果您查看客户帐户页面的源代码,您会注意到它从 css_secure
文件夹中提取 CSS,但在主页上它使用 css
文件夹。所以它已经设置为知道安全页面和非安全页面之间的区别,但是 CSS 的合并没有考虑到这一点。
为了解决这个问题,我做了一个基本扩展,用新的 _prepareUrl
方法重写了 core/design_package
模型。唯一的区别是在上面提到的行之后我添加了这个:
$secure = $secure && Mage::app()->getRequest()->isSecure();
这确保只有 css_secure
文件夹中的合并 css 文件才能获得资源的安全 URL。
希望这对遇到类似问题的人有所帮助。
关于css - Magento CSS 图像指令和 CDN 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128954/