css - Magento CSS 图像指令和 CDN 冲突

标签 css cdn magento

我在这里看到了一些关于当 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/

相关文章:

php - Magento : Fatal error: Class 'Mage_Giftcards_Helper_Data' not found in . ..../app/Mage.php 第 546 行

html - Firefox anchor 大纲问题

css - 文本未使用自动换行包装在 div 容器内

css - 如何在不影响可访问性的情况下删除 Firefox 链接中的虚线轮廓?

angularjs - 生产和开发需要哪些部分的 Node 模块?

azure - 无法更新自定义域属性

JavaScript 无法在我的服务器上运行

css - 在不同的像素密度下测试 CSS

php - Magento 中仍在使用数据库布局更新吗?

Magento 1.7.0.2 启用 paypal 标准后订单未显示在我的帐户中