NGINX:仅基于特定URL的cookie重定向用户

Bow*_*ema 4 cookies redirect nginx server

我正在构建一个封闭的社交网络,目前当用户未登录时,他们将始终被重定向到我的域的主页.

我想做的是做以下事情:

  1. 使用NGINX检查用户是否已登录(通过检查cookie),然后当他们转到主页(mydomain.com)时重定向到mydomain.com/newsfeed.

  2. 只有当用户浏览到主页并且不应该在任何其他网址上工作时才应用此检查(否则它们将始终被重定向).

我是NGINX的新手,并查看了使用cookie进行重定向的各种教程但未能得到答案(最明显的是将重定向限制为仅限主页).

提前致谢!

Bow*_*ema 12

最终正确解决方案

location ~* ^/$ {
 if ($http_cookie ~* "wordpress_logged_in") {
    return 301 http://example.com/newsfeed/;
 }
}
Run Code Online (Sandbox Code Playgroud)

  • @MatthewHaworth 不要只是尖叫你不能在位置上下文中使用“if”。在位置上下文中的 `if` 内可以完成的(唯一)100% 安全的事情是:`return ...;` 和 `rewrite ... last;`。上面的例子使用了“return”,这完全没问题。 (4认同)
  • 我不会使用301,因为它是永久重定向,并且您想要的重定向仅用于登录时.而是使用302. (3认同)

Don*_*dez 5

让我们假设我有一个像这样的饼干: name=value

server {
    listen 80;
    server_name mydomain.com;

    location ~* ^/$ {
        if ($cookie_name = "value") {
            return 301 http://example.com/newsfeed/;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

location 块只会匹配主页,检查 cookie 是否存在(您也可以只使用if ($cookie_name)),如果存在,将用户重定向到http://example.com/newsfeed/