Regras nginx diferentes baseadas no referenciador

10

Estou usando o WordPress com o WP Super Cache. Eu quero visitantes que venham do Google (que inclua todos os referencias específicos do país, como google.co.in, google.co.uk e etc.) para ver o conteúdo não armazenado em cache .

Existem as minhas regras nginx que não funcionam do jeito que eu quero:

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

O que devo fazer para alcançar meu objetivo?

    
por Dylan Valade 02.09.2010 / 13:32

4 respostas

2

Eu não estou familiarizado com o WP Supercache, mas se você só precisa reescrever para index.php para evitar o cache, não deve ser muito difícil.

O seu filtro existente não é abrangente, pois verifica apenas o google.com e o google.co. De acordo com esta lista , existem muitos TLDs que o Google usa e que não correspondem, como google.de, google.fr, etc.

O filtro a seguir deve limitar você a referenciadores que comecem com o www.google e terminem com qualquer combinação de TLDs de dois a três caracteres.

if ($http_referer ~* ^www.google.[a-z]{2,3}(.[a-z]{2})?$ ) {
    # do whatever you need to do here to avoid caching
}
    
por 16.02.2012 / 18:46
2

Você está quase lá.

Primeiro, as regras do WP Super Cache são muito confusas. Eles realmente precisam ser redesenhados a partir do zero, mas isso é um projeto para outro dia.

Para que isso funcione, não retorne imediatamente; em vez disso, defina o $supercache_uri = '' como todas as outras verificações. Por exemplo:

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

Isso precisa aparecer APÓS o ponto em que $supercache_uri é originalmente set e não no início onde você o possui.

    
por 21.07.2012 / 03:07
0

isso pode funcionar para $ http_referer:

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

Tente isso

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