私の目標は、特定のクエリ文字列属性とその値を「ホワイトリストに登録」して、ワニスが URL 間でキャッシュを変更しないようにすることです。
例:
Url 1: http://foo.com/someproduct.html?utm_code=google&type=hello
Url 2: http://foo.com/someproduct.html?utm_code=yahoo&type=hello
Url 3: http://foo.com/someproduct.html?utm_code=yahoo&type=goodbye
上記の例では、「type」ではなく「utm_code」をホワイトリストに登録したいので、最初の URL がヒットした後、ニスがそのキャッシュされたコンテンツを 2 番目の URL に提供するようにします。
ただし、3 番目の URL の場合、属性「type」の値が異なるため、varnish キャッシュ ミスになるはずです。
以下の 2 つの方法を試しましたが (現在は見つけられない drupal のヘルプ記事にあります)、うまくいきませんでした。正規表現が間違っている可能性があります。
# 1. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_(campaign|content|medium|source|term)=[^&\s]*&?", "\1");
# get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");
# 2. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_campaign=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])foo_bar=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])bar_baz=[^&\s]*&?", "\1");
# get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");