web-dev-qa-db-ja.com

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

私はWordPress with WP Super Cacheを使用しています。Googleからアクセスした訪問者が欲しいです。 .co.ukなど)ncachedの内容を確認します。

私の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;
    }
}

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

12
juana

私は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
}
3
Farray

あと少しです。

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

これを機能させるには、すぐに戻るのではなく、$supercache_uri = ''他のすべてのチェックと同様に。例えば:

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

これは、$supercache_uriは元々setであり、最初に持っている場所ではありません。

2
Michael Hampton

これは$ http_refererで機能します:

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