基于引荐来源的不同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;
    }
}

我应该怎么做才能实现自己的目标?

Answers:


3

我对WP Supercache不太熟悉,但是如果您只需要重写到index.php来避免缓存,那应该不会太困难。

您现有的过滤器并不全面,因为它仅检查google.com和google.co。根据此列表,Google使用了许多不匹配的TLD,例如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如何避免服务器端缓存?
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.