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?

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
}

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.


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.