当我有唯一的URL参数时,如何让Magento提供页面的缓存版本?

时间:2013-03-14 13:31:38

标签: magento url caching parameters fpc

这是一个简单的问题,在搜索中没有答案(google / bing / stackoverflow)。答案当然可能很复杂。

我已经在Magento中阅读了几篇关于FPC的文章,并且尚未明确指出我需要添加或创建代码的位置,这样当发送某些URL参数时,它会提供页面的缓存版本而不会尝试使用URL参数重新缓存。

http://www.kingletas.com/2012/09/how-does-magento-full-page-cache-works.html

例如,当你转到http://www.example.com/shoes时,它会加载正确的缓存版本。但是,使用谷歌分析和任何其他类型的第三方报告,特别是使用唯一标识符,它将重新加载页面,就像它没有被缓存一样。所以http://www.example.com/shoes?utm_key=A1537BD94EF07会创建该页面的新缓存版本,依此类推。

我希望能够排除某些网址参数,而不是全部。主要是我用于跟踪客户的任何参数。

就代码而言,由于FPC的复杂性以及当前没有设置开发站点以进行测试,我还没有提出任何建议。

关于我可以添加此异常的任何线索都会有所帮助,谢谢!

编辑:我想补充说我正在使用企业版。并使用Redis进行缓存。

1 个答案:

答案 0 :(得分:3)

我在修复程序上开发了自己的扩展程序。

简而言之,get参数用于缓存ID。因此,为了绕过这一点,我创建了一个扩展,改变了以下内容:

/app/code/core/Enterprise/PageCache/Model/Processor/Category.php

改变的两个功能

protected function _getQueryParams()

public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)

/app/code/core/Enterprise/PageCache/Model/Processor/Default.php

一项功能已更改

public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)

更改后,它不再使用我指定的跟踪参数创建缓存ID。

示例:

public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)
{
    $queryParams = $_GET;
    ksort($queryParams);
    /**
    * unset known tracking codes
    */
    unset($queryParams["trk_msg"]);
    unset($queryParams["trk_contact"]);
    unset($queryParams["utm_source"]);
    unset($queryParams["utm_medium"]);
    unset($queryParams["utm_term"]);
    unset($queryParams["utm_campaign"]);
    unset($queryParams["utm_content"]);
    /** End Edit */
    $queryParamsHash = md5(serialize($queryParams));
    return $processor->getRequestId() . '_' . $queryParamsHash;
}