这是一个简单的问题,在搜索中没有答案(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进行缓存。
答案 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;
}