Aturan nginx berbeda berdasarkan pengarah

12

Saya menggunakan WordPress dengan WP Super Cache. Saya ingin pengunjung yang datang dari Google (Itu termasuk semua rujukan khusus negara seperti google.co.in, google.co.uk, dll.) Untuk melihat konten yang tidak disimpan .

Ada aturan nginx saya yang tidak berfungsi seperti yang saya inginkan:

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

Apa yang harus saya lakukan untuk mencapai tujuan saya?

Dylan Valade
sumber

Jawaban:

3

Saya tidak terbiasa dengan WP Supercache, tetapi jika Anda hanya perlu menulis ulang ke index.php untuk menghindari cache seharusnya tidak terlalu sulit.

Filter Anda yang ada tidak komprehensif karena hanya memeriksa google.com dan google.co. Menurut daftar ini , ada banyak TLD yang digunakan Google yang tidak cocok, seperti google.de, google.fr, dll.

Filter berikut akan membatasi Anda untuk pengarah yang mulai dengan www.google dan diakhiri dengan kombinasi TLD 2-3 karakter.

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

Kamu hampir sampai.

Pertama, aturan WP Super Cache sangat berantakan. Mereka benar-benar perlu dirancang ulang dari bawah ke atas, tapi itu proyek untuk hari lain.

Agar ini berfungsi, jangan segera kembali, alih-alih setel $supercache_uri = ''seperti yang dilakukan semua cek lainnya. Contohnya:

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

Ini perlu muncul SETELAH titik di mana $supercache_uriaslinya set, dan bukan di awal di mana Anda memilikinya.

Michael Hampton
sumber
0

ini bekerja untuk $ http_referer:

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

sumber
ini juga tidak berhasil
-1

Coba ini

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
sumber
2
Saya tidak mengerti
Pierre.Vriens
1
Saya juga tidak mengerti. Bagaimana cara mengarahkan ulang browser ke URL lain menghindari caching sisi server?
Michael Hampton