リファラーに基づいた異なるnginxルール


12

WP Super CacheでWordPressを使用しています。Googleからの訪問者(google.co.in、google.co.ukなど、国固有のすべてのリファラーを含む)にキャッシュされていないコンテンツを表示してほしい。

私が望む方法で動作していない私のnginxルールがあります:

server {
    server_name  website.com;
    location / {
        root   /var/www/html/website.com;
        index  index.php;
           if ($http_referer ~* (www.google.com|www.google.co) ) {
                   rewrite . /index.php break;
           }
           if (-f $request_filename) {
                   break;
           }
           set $supercache_file '';
           set $supercache_uri $request_uri;
           if ($request_method = POST) {
                   set $supercache_uri '';
           }
           if ($query_string) {
                   set $supercache_uri '';
           }
           if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                   set $supercache_uri '';
           }
           if ($supercache_uri ~ ^(.+)$) {
                   set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
           }
           if (-f $document_root$supercache_file) {
                   rewrite ^(.*)$ $supercache_file break;
           }
           if (!-e $request_filename) {
                   rewrite . /index.php last;
           }
    }
    location ~ \.php$ {
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME /var/www/html/website.com$fastcgi_script_name;
            include         fastcgi_params;
    }
}

目標を達成するにはどうすればよいですか?

回答:


3

私はWP Supercacheに精通していませんが、キャッシュを回避するためにindex.phpに書き直す必要があるだけであれば、それほど難しくないはずです。

既存のフィルターは、google.comとgoogle.coのみをチェックするため、包括的ではありません。このリストによれば、google.de、google.frなど、Googleが使用しない多くのTLDが一致しません。

次のフィルターでは、www.googleで始まり、2〜3文字のTLDの任意の組み合わせで終わるリファラーに制限する必要があります。

if ($http_referer ~* ^www.google.[a-z]{2,3}(.[a-z]{2})?$ ) {
    # do whatever you need to do here to avoid caching
}

2

あなたはほとんどそこにいます。

まず、WPスーパーキャッシュルールは非常に複雑です。彼らは本当に最初から再設計する必要がありますが、それは別の日のプロジェクトです。

これを機能させるには、すぐに戻らないで、代わり$supercache_uri = ''に他のすべてのチェックと同じように設定してください。例えば:

if ($http_referer ~* (www.google.com|www.google.co) ) {
    set $supercache_uri '';
}

このニーズは、ポイントの後に表示することが$supercache_uriもともとあるsetあなたはそれを持って先頭ではない、と。


0

これは$ http_refererで機能する可能性があります。

       if ($http_referer ~* (www.google.com|www.google.co) ) {
               break;
       }
       if (!-e $request_filename) {
               rewrite . /index.php break;
       }

これも機能しません

-1

これを試して

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}

2
わかり

1
わかりません。ブラウザを別のURLにリダイレクトすると、サーバー側のキャッシュが回避されますか?
マイケルハンプトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.