3

这是一个简单的问题,在搜索中没有答案(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时,它会加载正确的缓存版本。但是,对于谷歌分析和任何其他类型的第 3 方报告,尤其是使用唯一标识符,它会重新加载页面,就好像它没有被缓存一样。因此http://www.example.com/shoes?utm_key=A1537BD94EF07将创建该页面的新缓存版本,依此类推。

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

至于代码,由于 FPC 的复杂性以及目前没有设置用于测试的开发站点,我还没有提出任何建议。

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

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

4

1 回答 1

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;
}
于 2013-03-21T15:19:55.530 回答