Різні правила nginx на основі реферала


12

Я використовую WordPress з WP Super Cache. Я хочу, щоб відвідувачі, які приїжджають з Google (це стосується всіх конкретних країн, таких як google.co.in, google.co.uk тощо), бачити вміст, який не зберігається .

Є мої правила 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;
    }
}

Що мені робити для досягнення своєї мети?

Відповіді:


3

Я не знайомий з WP Supercache, але якщо вам просто потрібно переписати на index.php, щоб уникнути кешу, це не повинно бути надто складно.

Ваш існуючий фільтр не є вичерпним, оскільки він перевіряє лише google.com та google.co. Відповідно до цього списку , існує багато TLD, які Google використовує, які не відповідають, наприклад, google.de, google.fr тощо.

Наступний фільтр повинен обмежувати вас до посилань, які починаються з 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
}

2

Ти майже там.

По-перше, правила WP Super Cache дуже безладні. Їх справді потрібно переробити з нуля, але це проект для іншого дня.

Щоб це не працювало, не повертайтесь відразу, а встановіть так, $supercache_uri = ''як це роблять усі інші перевірки. Наприклад:

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

Це повинно з'являтися ПІСЛЯ точки, де $supercache_uriспочатку set, а не на початку, де це є.


0

це може працювати для $ http_referer:

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

це також не працює

-1

Спробуйте це

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}

2
Я не розумію
Pierre.Vriens

1
Я також не розумію. Як перенаправлення браузера на іншу URL-адресу дозволяє уникнути кешування на стороні сервера?
Майкл Хемптон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.