1

モバイル/タブレット デバイスを確認するために、次のように Varnish キャッシュを使用しています。

sub device_detection
{
    set req.http.X-Device = "pc";

    if(req.http.User-Agent ~ "iP(hone|od)" || req.http.User-Agent ~ "Android" || req.http.User-Agent ~ "Symbian" || req.http.User-Agent ~ "^BlackBerr$
    {
            set req.http.X-Device = "mobile";
    }

    if(req.http.User-Agent ~ "^PalmSource")
    {
            set req.http.X-Device = "mobile";
    }

    if(req.http.User-Agent ~ "Build/FROYO" || req.http.User-Agent ~ "XOOM" )
    {
            set req.http.X-Device = "pc";
    }

    if((req.http.Cookie ~ "(force_desktop)"))
    {
            set req.http.X-Device = "pc";
    }

    if((req.http.Cookie ~ "(force_mobile)"))
    {
            set req.http.X-Device = "mobile";
    }
}

これにより、新しいヘッダーが正常に設定されます。次に、次を使用して PHP でこれを確認できます。

if(isset($headers['X-Device']) && $headers['X-Device'] == "mobile")
{
     // do mobile stuff here 
}

私の問題は、このヘッダーがキャッシュ ハッシュの一部を形成しないことです (それが正しい用語である場合)。そのため、最初にモバイル デバイスで表示された場合、デバイスに関係なく、今後のすべてのリクエストのキャッシュになります。最初のリクエストがデスクトップ スタイルのデバイスから送信された場合は、その逆です。

mobileと を使用してサイトの 2 つのバージョンをキャッシュしながら、PHP から確実に取得できるように、このヘッダーをハッシュの一部にする方法を教えてpcください。

4

1 に答える 1

3

これを行うために必要な VCL スニペットは次のとおりです。

sub vcl_hash {
    if (req.http.X-Device) {
        hash_data(req.http.X-Device);
    }
}

これは、Varnish の公式ドキュメントで説明されています。

https://www.varnish-cache.org/docs/3.0/tutorial/devicedetection.html

于 2013-05-01T06:50:07.247 に答える