Różne reguły nginx oparte na polecającym

12

Używam WordPress z WP Super Cache. Chcę, aby odwiedzający, którzy pochodzą z Google (dotyczy to wszystkich stron odsyłających specyficznych dla kraju, takich jak google.co.in, google.co.uk itp.), Aby zobaczyli nieposiadaną zawartość.

Istnieją moje zasady nginx, które nie działają tak, jak chcę:

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

Co powinienem zrobić, aby osiągnąć swój cel?

Dylan Valade
źródło

Odpowiedzi:

3

Nie jestem zaznajomiony z WP Supercache, ale jeśli po prostu musisz przepisać na index.php, aby uniknąć bufora, nie powinno to być zbyt trudne.

Twój istniejący filtr nie jest wyczerpujący, ponieważ sprawdza tylko google.com i google.co. Zgodnie z tą listą istnieje wiele domen TLD, których Google nie pasuje, takich jak google.de, google.fr itp.

Poniższy filtr powinien ograniczyć Cię do stron odsyłających, które zaczynają się od www.google i kończą dowolną kombinacją 2-3 znaków TLD.

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

Jesteś prawie na miejscu.

Po pierwsze, zasady WP Super Cache są bardzo nieuporządkowane. Naprawdę trzeba je przeprojektować od podstaw, ale to projekt na kolejny dzień.

Aby to zadziałało, nie wracaj od razu, zamiast tego ustaw $supercache_uri = ''jak wszystkie inne kontrole. Na przykład:

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

To musi pojawić się PO punkcie, w którym $supercache_urijest pierwotnie set, a nie na początku, gdzie go masz.

Michael Hampton
źródło
0

może to działać dla $ http_referer:

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

źródło
to też nie działa
-1

Spróbuj tego

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
źródło
2
Nie rozumiem
Pierre.Vriens
1
Ja też tego nie rozumiem. W jaki sposób przekierowanie przeglądarki na inny adres URL zapobiega buforowaniu po stronie serwera?
Michael Hampton