我正在使用 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;
}
}
我应该怎么做才能达到我的目标?
答案1
我对 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
,而不是在它的开头。
答案3
这可能适用于$http_referer:
if ($http_referer ~* (www.google.com|www.google.co) ) {
break;
}
if (!-e $request_filename) {
rewrite . /index.php break;
}
答案4
尝试这个
if ($http_referer ~* (www.example.com|example.com.au) ) {
return 301 http://your-url.example/custom-path;
}