【问题标题】:NGINX: Redirect a user based on cookie for a specific URL onlyNGINX:仅基于特定 URL 的 cookie 重定向用户
【发布时间】:2015-05-30 11:54:09
【问题描述】:

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

我想做的是做以下事情:

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

  2. 仅当用户浏览主页时才应应用此检查,并且不应在任何其他 url 上工作(否则它们将始终被重定向)。

我对 NGINX 非常陌生,并且查看了各种使用 cookie 进行重定向的教程,但没有得到答案(最明显的是限制重定向到主页)。

提前致谢!

【问题讨论】:

  • 但是为什么要使用nginx呢?它完全可以在 WordPress 上轻松实现。
  • 我让它与 WP 重定向一起使用。但这仍然需要加载大量 PHP,我注意到重定向非常慢。

标签: redirect cookies nginx server


【解决方案1】:

假设我有一个这样的 cookie:name=value

server {
    listen 80;
    server_name mydomain.com;

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

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

【讨论】:

    【解决方案2】:

    最终正确解决方案:

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

    【讨论】:

    • 我不会使用 301,因为它是永久重定向,而您想要的重定向仅适用于登录时。而不是使用 302。
    • nginx.com/resources/wiki/start/topics/depth/ifisevil 如果在位置上下文中,请勿使用
    • @MatthewHaworth 不要只是尖叫你不能在位置上下文中使用if。在位置上下文中可以在if 内完成的(唯一)100% 安全的事情是:return ...;rewrite ... last;。上面的例子使用return 完全没问题。
    • 完全匹配 location = / { ... } 将比正则表达式 location ~ ^/$ { ... } 更快
    猜你喜欢
    • 2021-09-21
    • 2014-04-19
    • 1970-01-01
    • 2016-12-16
    • 2019-05-17
    • 2017-02-07
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多