gpt4 book ai didi

php - Symfony2 HTTP 缓存 : is there a way to ignore query parameters when generating the cache?

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:37 25 4
gpt4 key购买 nike

我找到了一篇概述如何 exclude parameters from the cache for Symfony 1.4 的帖子我想为 Symfony 2.3 做一些类似的事情。

当使用 say Adwords 时,uri 中将包含一堆与页面呈现无关的查询参数 [gclid, x, y, utm_source, utm_medium, utm_campaign, utm_content] 我想要一种方法来告诉 Symfony2 缓存以下页面是相同的并将它们缓存为一个页面:

  • http://www.example.com
  • http://www.example.com?gclid=1

有人知道怎么做吗?

最佳答案

假设您使用的是 Symfony2 AppCache 而不是 Varnish。 AppCache 是一个 php 反向代理:它缓存 URI 响应和进程 header 。显然,以下 uris:

是不同的,所以诀窍是让它们在反向代理中相等。你可以在很多层面上做到这一点:

  • 在网络服务器上
  • Request 对象上
  • 在 AppCache 存储上

IMO 更简单的解决方案是在创建时从 Request 中删除它们。下面的代码直接在 app.php 中执行此操作,如果您愿意,可以对 Request 对象的子类执行相同的操作,但您必须处理 boostrap。

require_once __DIR__.'/../app/AppKernel.php';
require_once __DIR__.'/../app/AppCache.php';

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
//Modify query string here
$qs = $request->server->get('QUERY_STRING');
if ('' != $qs) {

$parts = array();

foreach (explode('&', $qs) as $chunk) {

$param = explode("=", $chunk);

if (!$param || !in_array($param[0], array('gclid', 'x', 'y', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_content'))) {
$parts[] = $chunk;
}
}
$request->server->set('QUERY_STRING', implode('&', $parts));
}
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

关于php - Symfony2 HTTP 缓存 : is there a way to ignore query parameters when generating the cache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com