nginx Clear 301来自客户端浏览器缓存

时间:2016-09-26 17:52:56

标签: redirect caching nginx browser-cache http-status-code-301

我愚蠢地使用301而不是302来进行Nginx中的特定重定向

 var result = (from p in db.Product
              join r in db.Restaurant on p.RestaurantId equals r.RestaurantId
              where
                    p.ProductName.Contains("something") &&
                    r.RestaurantAddress.Contains("something")
              select new
              {
                    Product = p,
                    Restaurant = r
              }).ToList();

但现在我需要改变我们重定向的位置:

location /somewhere/ {
  return 301 /somewhere/neat/;
}

如果我以隐身模式查看网址或破坏我的浏览器重定向缓存,我当然可以看到此更改,但许多用户无法自行查看。即使我们可以可靠地指示我们的客户破坏他们的缓存,我们也只能达到他们的一小部分,其余的将留下旧的内容。

1 个答案:

答案 0 :(得分:2)

你在谈论的是缓存破坏,我遇到了同样的问题。您需要做的就是(如果我理解正确的话)是将一个查询字符串参数强制到url的末尾,这有效地迫使客户端浏览器刷新以获得任何" new"内容。

一个可能的解决方法是在查询字符串尚未存在的情况下将查询字符串附加到网址的末尾。

在您的情况下,您可能可以使用重写"修复"错误的网址,以及缓存破坏原始网址重定向:

# Fix the incorrect url
location /somewhere/neat/ {
  rewrite ^(.*)$ /somewhere/$1?cb=12345 last;
}

# Handle the new redirect
location /somewhere/ {
  return 302 /somewhere/else/entirely/;
}

cb = 12345 可以是您想要的任何内容,只要它只是一个查询字符串

这种方法的唯一问题是,如果您的位置/某处/整洁仍然需要仍然是活动页面,因为这会有效地迫使它始终返回/某处