Unterschiedliche Nginx-Regeln basierend auf Referrer

12

Ich benutze WordPress mit WP Super Cache. Ich möchte, dass Besucher, die von Google kommen (dies schließt alle länderspezifischen Verweise wie google.co.in, google.co.uk und usw. ein), nicht zwischengespeicherte Inhalte sehen.

Es gibt meine Nginx-Regeln, die nicht wie gewünscht funktionieren:

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

Was soll ich tun, um mein Ziel zu erreichen?

Dylan Valade
quelle

Antworten:

2

Ich bin nicht mit WP Supercache vertraut, aber wenn Sie nur auf index.php umschreiben müssen, um den Cache zu umgehen, sollte es nicht allzu schwierig sein.

Ihr vorhandener Filter ist nicht vollständig, da nur nach google.com und google.co gesucht wird. Laut dieser Liste gibt es viele TLDs, die von Google nicht übereinstimmen, wie z. B. google.de, google.fr usw.

Der folgende Filter sollte Sie auf Verweise beschränken, die mit www.google beginnen und mit einer beliebigen Kombination aus TLD mit 2-3 Zeichen enden.

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

Du bist fast da.

Erstens sind die WP Super Cache-Regeln sehr unübersichtlich. Sie müssen wirklich von Grund auf neu gestaltet werden, aber das ist ein Projekt für einen anderen Tag.

Um dies zum Laufen zu bringen, kehren Sie nicht sofort zurück, sondern stellen Sie die Option $supercache_uri = ''wie alle anderen Überprüfungen ein. Zum Beispiel:

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

Dies muss NACH dem Punkt erscheinen, an dem $supercache_uries ursprünglich war set, und nicht am Anfang, an dem Sie es haben.

Michael Hampton
quelle
0

Dies funktioniert möglicherweise für $ http_referer:

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

quelle
das funktioniert auch nicht
-1

Versuche dies

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
quelle
2
Ich verstehe es nicht
Pierre.Vriens
1
Ich verstehe es auch nicht. Wie vermeidet das Umleiten des Browsers zu einer anderen URL das serverseitige Caching?
Michael Hampton