Я использую 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;
}
}
Что мне делать, чтобы достичь своей цели?
Я не знаком с 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
}
Ты почти там.
Во-первых, правила WP Super Cache очень запутаны. Их действительно нужно переработать с нуля, но это проект другого дня.
Чтобы это работало, не возвращайтесь немедленно, вместо этого установите $supercache_uri = ''
как и все остальные проверки. Например:
if ($http_referer ~* (www.google.com|www.google.co) ) {
set $supercache_uri '';
}
Это должно появиться ПОСЛЕ того момента, когда $supercache_uri
изначально set
, а не в начале, где он есть.
это может работать для $ http_referer:
if ($http_referer ~* (www.google.com|www.google.co) ) {
break;
}
if (!-e $request_filename) {
rewrite . /index.php break;
}
Попробуй это
if ($http_referer ~* (www.example.com|example.com.au) ) {
return 301 http://your-url.example/custom-path;
}